Diferencia en la serialización de tipos polimórficos a JSON
Tengo una clase en la que he aplicado @JsonTypeInfo
y JsonSubTypes
de la siguiente manera:
public class RequestDto {
private List<IFoo> pageConfig = new ArrayList<>();
...
}
@JsonTypeInfo(
use = Id.NAME,
include = As.PROPERTY,
property = "iSlotType",
visible = true
)
@JsonSubTypes({
@Type(value = LSlot.class),
@Type(value = WSlot.class)
})
public interface IFoo {
...
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonTypeName("lSlot")
public class LSlot implements IFoo{
private String id;
}
Lo interesante es que cuando serializo un objeto de RequestDto
, la serialización es como se espera:
{
"pageConfig": [
{
"iSlotType": "lSlot",
"id": "1001"
},
{
"iSlotType": "wSlot",
"id": "23",
"parentId": "34"
}
]
}
Pero cuando serializo solo la lista como:
objectMapper.writeValueAsString(requestDto.getPageConfig);
Obtengo la cadena sin los tipos de IFoo:
[
{
"id": "1001"
},
{
"id": "23",
"parentId": "34"
}
]
¿Cómo puedo obtener también el tipo de información aquí?
davy.ai
Para obtener la información de tipo junto con la lista serializada de
IFoo
, puedes utilizar la claseTypeReference
proporcionada por la biblioteca Jackson.Aquí tienes un ejemplo de código:
Este código serializará la lista con la propiedad
iSlotType
indicando el tipo de objetosIFoo
.También puedes utilizar la clase
ObjectWriter
para personalizar las opciones de serialización según tus necesidades.