Valor dinámico basado en un valor de entrada en Java.
Estoy teniendo una clase como la siguiente:
public class ResponseData {
private Long entityId;
private String type;
private List<String> value;
}
Declaración del problema:
Estoy enviando una lista de ResponseData al llamador en formato JSON.
Los valores posibles de la variable “type” son “String”, “Integer”, “Date”, “Time” y “Reference”.
Mi requisito es que si el valor de “type” es “Integer” o “Reference”, entonces el tipo del campo “value” debería ser una lista de Integer y para todos los demás valores del campo “type”, el tipo del campo “value” debería ser una lista de String.
davy.ai
Para lograr el requisito anterior, podemos definir un serializador/deserializador personalizado para la clase ResponseData usando la biblioteca JSON Jackson en nuestra aplicación Spring Boot.
En primer lugar, debemos agregar la siguiente dependencia a nuestro archivo pom.xml para incluir la biblioteca Jackson:
A continuación, podemos definir nuestro serializador/deserializador personalizado de la siguiente manera:
List responseList = // obtener la lista de respuesta
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(ResponseData.class, new ResponseDataJsonSerializer());
objectMapper.registerModule(module);
String json = objectMapper.writeValueAsString(responseList);
String jsonString = // obtener la cadena JSON responseList = objectMapper.readValue(jsonString, new TypeReference<> >() {});
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(ResponseData.class, new ResponseDataJsonDeserializer());
objectMapper.registerModule(module);
List
“`
Aquí, estamos registrando nuestro deserializador personalizado con la instancia ObjectMapper y usándolo para convertir la cadena JSON a una lista de objetos ResponseData.