Hacemos una revisión profunda cada enunciado en nuestro sitio web con la meta de mostrarte en todo momento información veraz y actual.
Solución:
@JsonProperty
todas las anotaciones en su código se colocan en campos privados dentro de su clase de datos y, de manera predeterminada, Jackson no escanea los campos privados en busca de anotaciones. Tienes que indicarle que haga lo contrario poniendo @JsonAutoDetect
anotación:
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
data class CurrencyInfo(
@JsonProperty("currency_info") var currencyInfo: CurrencyInfoItem?
)
o, alternativamente, puede mover sus anotaciones en los métodos de acceso:
data class CurrencyInfo(
@get:JsonProperty("currency_info") var currencyInfo: CurrencyInfoItem?
)
Puedes hacer algo como esto:
data class CurrencyInfo @JsonCreator constructor (
@param:JsonProperty("currency_info")
@get:JsonProperty("currency_info")
val currencyInfo: CurrencyInfoItem?
)
el código anterior se traduce a java como:
public final class CurrencyInfo
@Nullable
private final String currencyInfo;
@JsonProperty("currency_info")
@Nullable
public final String getCurrencyInfo()
return this.currencyInfo;
@JsonCreator
public CurrencyInfo(@JsonProperty("currency_info") @Nullable String currencyInfo)
this.currencyInfo = currencyInfo;
el código de la respuesta aceptada se traduce a Java de la siguiente manera:
Primero (no es inmutable puro):
@JsonAutoDetect(
fieldVisibility = Visibility.ANY
)
public final class CurrencyInfo
@Nullable
private String currencyInfo;
@Nullable
public final String getCurrencyInfo()
return this.currencyInfo;
public final void setCurrencyInfo(@Nullable String var1)
this.currencyInfo = var1;
public CurrencyInfo(@JsonProperty("currency_info") @Nullable String currencyInfo)
this.currencyInfo = currencyInfo;
Segundo (probablemente tiene problemas con la deserialización):
public final class CurrencyInfo
@Nullable
private final String currencyInfo;
@JsonProperty("currency_info")
@Nullable
public final String getCurrencyInfo()
return this.currencyInfo;
public CurrencyInfo(@Nullable String currencyInfo)
this.currencyInfo = currencyInfo;
Puedes agregar el jackson-module-kotlin
(https://github.com/FasterXML/jackson-module-kotlin) y registre el módulo kotlin con jackson:
val mapper = ObjectMapper().registerModule(KotlinModule())
Entonces (y muchas otras cosas) funciona automáticamente.
Si estás de acuerdo, tienes la libertad de dejar una noticia acerca de qué te ha gustado de este ensayo.