polymorphic defaulttyping java jackson polymorphism deserialization

java - defaulttyping - jackson polymorphic



Deserializar tipos polimórficos con @JsonUnwrapped usando Jackson (0)

Lo que quiero hacer

Quiero usar Jackson para deserializar un tipo polimórfico, usando la anotación estándar @JsonTypeInfo siguiente manera:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.EXISTING_PROPERTY, property = "identifier") @JsonSubTypes({@Type(value = A.class, name = "A"), @Type(value = B.class, name = "B")}) abstract Class Base {} Class A implements Base { public String identifier = "A"; } Class B implements Base { public String identifier = "B"; } Class Decorated { public String decoration = "DECORATION"; @JsonUnwrapped public Base base; } /* Serialized instance of Decorated WITHOUT @JsonUnwrapped: { "decoration" : "DECORATION", "base" : { "identifier" : "A" } } Serialized instance of Decorated WITH @JsonUnwrapped: { "decoration" : "DECORATION", "identifier" : "A" } */

Publicación relacionada: Deserializar JSON con Jackson en tipos polimórficos: un ejemplo completo me da un error de compilación

Esto normalmente puede ser deserializado por Jackson automágicamente de la siguiente manera:

public Object deserialize(String body, Class clazz) { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.readValue(body, clazz); }

(Y esto funcionaría si se eliminara la anotación @JsonUnwrapped)

El problema

Los tipos polimórficos no funcionan bien con la anotación @JsonUnwrapped de Jackson, como se explica en este ticket de Jira de 2012:

http://markmail.org/message/pogcetxja6goycws#query:+page:1+mid:pogcetxja6goycws+state:results

Maneje tipos polimórficos con @JsonUnwrapped

De acuerdo, aunque arreglar cosas es obviamente preferible, mejorar los mensajes de error sería útil si eso no se puede hacer.

Desenvolver es una de las características donde las implementaciones se vuelven lo suficientemente complicadas como para que cualquier error que surja (especialmente en la deserialización) tienda a ser resistente a los antibióticos ...

Poco alentador

Tres años despues:

http://markmail.org/message/cyeyc2ousjp72lh3

Maneje tipos polimórficos con @JsonUnwrapped

Resolución: no solucionará

Maldita sea.

Entonces, ¿hay alguna manera de convencer a Jackson para que me dé este comportamiento sin modificar deserialize() o eliminar la anotación @JsonUnwrapped ?