Eu tenho um POJO que se parece com isso
class Bean {
private Instant created;
private Instant updated;
private String name;
private int count;
}
e os dados JSON de entrada são assim
{
"time_created": <custom timestamp>,
"time_updated": <custom timestamp>,
// Other data...
"person": {
"name": "John"
// Other data...
},
"stats": {
"button": {
"count": 5
// ...
}
// ...
}
}
Quero desserializar o JSON para que ele seja nivelado no POJO. Aninhar classes parece um exagero, pois eu só quero uma propriedade específica e não quero receber chamadas como bean.getStats().getButton().getCount()
, eu só quero bean.getCount()
. Já fiz isso com um desserializador personalizado, mas é confuso e frágil.
Existe uma maneira de fazer isso com anotações? Algo como
@JsonProperty(name = "count", root = "stats/button")
private int count;
Além disso, é Instants
necessário um desserializador personalizado. Acredito que posso cobrir isso com
@JsonDeserialize(using = CustomInstantDeserializer.class)
private Instant created;
@JsonDeserialize(using = CustomInstantDeserializer.class)
private Instant updated;
como anotações em cada um dos campos.
Desculpe desapontar, mas parece que é um problema em aberto em Jackson: https://github.com/FasterXML/jackson-annotations/issues/42 Se desejar, você pode votar positivamente neste problema e eles podem adicioná-lo no futuro, mas por enquanto você precisa fazer isso manualmente com um desserializador personalizado.