La deserialización de Jackson con @JsonUnwrapped
Tengo las siguientes clases:
public class Request {
public String name;
@JsonUnwrapped
@JsonInclude(JsonInclude.Include.NON_NULL)
public DateOfBirth dateOfBirth;
}
public class DateOfBirth {
public int day;
public int month;
public int year;
}
{
"name" : "John Doe"
}
La deserialización de este JSON crea un objeto Request
con name
igual a “John Doe” y dateOfBirth
con los valores de día, mes y año en 0.
¿Cómo puedo anular este comportamiento para que dateOfBirth
sea nulo?
Vale la pena mencionar que si se elimina la anotación
@JsonUnwrapped
, este tipo de JSON se deserializa como un objeto nulo, por lo que siento que me estoy perdiendo algún truco aquí.
Versión de Jackson – 2.13.1
davy.ai
Para anular este comportamiento y hacer que
dateOfBirth
sea nulo en lugar de tener el día, mes y año como 0, puedes agregar la anotaciónJsonSetter
al campodateOfBirth
en la claseRequest
de la siguiente manera:Esto establece un método personalizado de deserialización para el campo
dateOfBirth
que verifica si los campos de día, mes y año son todos 0. Si lo son, entoncesdateOfBirth
se establece como nulo. Si no lo son, entoncesdateOfBirth
se establece como el objeto DateOfBirth deserializado.