Java: Jackson polymorphes JSON de la désérialisation d'un objet avec une interface bien?

Je suis à l'aide de Jackson ObjectMapper pour désérialiser une représentation JSON d'un objet qui contient une interface comme l'une de ses propriétés. Une version simplifiée du code peut être vu ici:

https://gist.github.com/sscovil/8735923

En gros, j'ai une classe Asset avec deux propriétés: type et properties. Le JSON modèle ressemble à ceci:

{
    "type": "document",
    "properties": {
        "source": "foo",
        "proxy": "bar"
    }
}

La properties propriété est définie comme une interface appelée AssetProperties, et j'ai plusieurs classes qui l'implémentent (par exemple DocumentAssetProperties, ImageAssetProperties). L'idée est que les fichiers d'image ont des propriétés différentes (hauteur, largeur) que les fichiers de documents, etc.

J'ai travaillé hors des exemples dans cet article, de lire à travers des documents et des questions ici sur soi et au-delà, et expérimenté avec différentes configurations dans le @JsonTypeInfo annotation paramètres, mais je n'ai pas été capable de craquer cet écrou. Toute aide serait grandement appréciée.

Plus récemment, à l'exception que je reçois est: est-ce

java.lang.AssertionError: Could not deserialize JSON.
...
Caused by: org.codehaus.jackson.map.JsonMappingException: Could not resolve type id 'source' into a subtype of [simple type, class AssetProperties]

Merci d'avance!

SOLUTION:

Avec un grand merci à @Michał Ziober, j'ai été en mesure de résoudre ce problème. J'ai aussi été en mesure d'utiliser un Enum comme un type id, qui a pris un peu de Googling. Voici une mise à jour de Gist avec code de travail:

https://gist.github.com/sscovil/8788339

  • Ce n'sortie Json chercher quelque chose comme cela? Est-il un tas de métadonnées intégrées?
  • Merci pour le lien pour le programmerbruce post. Quelle grande ressource
InformationsquelleAutor Shaun Scovil | 2014-01-31