2016-05-23 1 views
1

J'essaie de définir deserializer personnalisé pour l'objet que je reçois de arangodb.arangodb personnalisé JsonDeserializer pour le document

MyDocument est classe que je stocke dans arangodb:

public class MyDocument { 

    private MyContent content; 
    ... 

    public MyContent getContent() { 
     return content; 
    } 

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

myCONTENT est une interface pour laquelle je veux avoir désérialiseur personnalisé:

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

MyContentDeserializer ressemble à ceci:

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

Lorsque j'essaie d'obtenir MyDocument de la base de données avec

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

méthode est MyContentDeserializer.deserialize exécute pas, au lieu que je suis exception:

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

La réponse a fonctionné pour vous? Si oui, pouvez-vous le marquer comme «accepté»? Si non, qu'est-ce qui manque? – dothebart

+0

Fait, désolé pour le retard. – pieniak

Répondre

1

@JsonDeserialize est l'annotation Jackson et votre stacktrace nous dit que vous utilisez pour Gson désérialisation. Donc, vous devez vous inscrire Gson désérialiseur ou utiliser Jackson

+0

Oui, c'est clair, mais comment allumer Jackson en arangodb? Est-ce possible? – pieniak

+0

@pieniak si vous utilisez 'arangodb-java-driver', alors à partir de ce numéro: https://github.com/arangodb/arangodb-java-driver/issues/15 ** nous n'avons pas de plans ajouter le support pour Jackson ** – varren

+0

Remerciements pour le lien. Je n'ai pas trouvé cette information. – pieniak