2016-05-23 109 views
1

我想设置自定义的反序列化器,我从arangodb得到的对象。arangodb定制JsonDeserializer文档

myDocument中是一流的,我存储在arangodb:

public class MyDocument { 

    private MyContent content; 
    ... 

    public MyContent getContent() { 
     return content; 
    } 

    public setContent(MyContent content) { 
     this.content = content; 
    } 
} 

为myContent是我想拥有的自定义解串器接口:

@JsonDeserialize(using = MyContentDeserializer.class) 
public interface MyContent { 
    ... 
} 

MyContentDeserializer看起来是这样的:

public class MyContentDeserializer extends JsonDeserializer<MyContent> { 
@Override 
    public DocumentContent deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { 
     ... 
    } 
} 

当我尝试从数据库中获取MyDocument时

arangoDriver.getDocument("myDocument", key, MyDocument.class) 

MyContentDeserializer.deserialize方法不执行,而不是我得到异常:

java.lang.RuntimeException: Unable to invoke no-args constructor for interface MyContent. Register an InstanceCreator with Gson for this type may fix this problem. 
at com.google.gson.internal.ConstructorConstructor$12.construct(ConstructorConstructor.java:210) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:186) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196) 
at com.google.gson.Gson.fromJson(Gson.java:810) 
at com.google.gson.Gson.fromJson(Gson.java:875) 
at com.google.gson.Gson$1.deserialize(Gson.java:128) 
at com.arangodb.entity.EntityDeserializers$DocumentEntityDeserializer.deserialize(EntityDeserializers.java:753) 
at com.arangodb.entity.EntityDeserializers$DocumentEntityDeserializer.deserialize(EntityDeserializers.java:728) 
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58) 
at com.google.gson.Gson.fromJson(Gson.java:810) 
at com.google.gson.Gson.fromJson(Gson.java:775) 
at com.google.gson.Gson.fromJson(Gson.java:724) 
at com.arangodb.entity.EntityFactory.createEntity(EntityFactory.java:162) 
at com.arangodb.BaseArangoDriver.createEntityImpl(BaseArangoDriver.java:367) 
at com.arangodb.BaseArangoDriver.createEntityWithFallback(BaseArangoDriver.java:259) 
at com.arangodb.BaseArangoDriver.createEntity(BaseArangoDriver.java:236) 
at com.arangodb.BaseArangoDriver.createEntity(BaseArangoDriver.java:311) 
at com.arangodb.impl.InternalDocumentDriverImpl.getDocument(InternalDocumentDriverImpl.java:262) 
at com.arangodb.ArangoDriver.getDocument(ArangoDriver.java:1908) 
at com.arangodb.ArangoDriver.getDocument(ArangoDriver.java:1893) 
+0

答案是否适合你?如果是的话,你能标记它'接受'吗?如果没有,缺少什么? – dothebart

+0

完成,对不起延迟。 – pieniak

回答

1

@JsonDeserializeJackson注释和您的堆栈跟踪告诉我们,您使用Gson反序列化。所以你必须注册Gson解串器或使用Jackson

+0

是的,这很清楚,但是如何在arangodb中打开Jackson?它有可能吗? – pieniak

+0

@pieniak如果你使用'arangodb-java-driver',那么从这个问题:https://github.com/arangodb/arangodb-java-driver/issues/15 **我们没有计划添加对杰克逊的支持** – varren

+0

感谢您的联系。我找不到这些信息。 – pieniak