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
?