Recebo um objeto JSON como este:
{
"id": "...",
"Nested": {
"nestedId": "..."
}
}
Há muitos outros atributos tanto no objeto de nível superior quanto no de nível Nested
único.
Estou interessado apenas em uma dúzia de campos do objeto de nível superior e do Nested
objeto nestedId
.
Este código os coloca em uma classe de dados Kotlin:
import com.fasterxml.jackson.annotation.*
@JsonIgnoreProperties(ignoreUnknown = true)
data class MainObject(
@JsonProperty("id") val id: String,
// ... more properties for other fields
@JsonProperty("nested") val nested: Nested?,
) {
val nestedId: String? get() = nested?.id
}
@JsonIgnoreProperties(ignoreUnknown = true)
data class Nested(
@JsonProperty("id") val id: String
)
e posso acessar o id do objeto aninhado facilmente com n.nestedId
.
Eu ainda gostaria de me livrar da Nested
classe extra.
Como posso usar anotações para desserializar apenas o id aninhado em vez do objeto inteiro?
Já vi um personalizado JsonDeserializer
, mas parece que tem mais código e complexidade do que minha pequena classe extra.
Acho que eu poderia usar readTree
e path
, mas aí terei que mapear todos os outros campos manualmente.
Tente algo assim
No seu exemplo, o campo aninhado (interno) é anulável, mas se
nestedId
não for, então eu sugeriria sairnestedId
do construtor e torná-lolateinit
: