¿Hay alguna forma de utilizar el procesador Jackson JSON para realizar una serialización de nivel de campo personalizada? Por ejemplo, me gustaría tener la clase
public class Person {
public String name;
public int age;
public int favoriteNumber;
}
serializado al siguiente JSON:
{ "name": "Joe", "age": 25, "favoriteNumber": "123" }
Tenga en cuenta que age = 25 está codificado como un número, mientras que favoriteNumber = 123 está codificado como una cadena . Fuera de la caja Jackson se dirige int
a un número. En este caso, quiero que favoriteNumber se codifique como una cadena.
java
json
serialization
jackson
Steve Kuo
fuente
fuente
Respuestas:
Puede implementar un serializador personalizado de la siguiente manera:
Java debería manejar el autoboxing de
int
aInteger
por usted.fuente
as=String.class
se ignora debido alusing
parámetro y no se requiere aquí. Nota: si también se usa using (), tiene prioridad (ya que especificó directamente el serializador, mientras que esto solo se usaría para ubicar el serializador) y el valor de esta propiedad de anotación se ignora.Person implements ToJson
?as=String.class
parte, debido a los tipos que usé. @ kevin-bowersox, sugiero actualizar su comentario, de acuerdo con lo que dijo @GarethLatty.Jackson-databind (al menos 2.1.3) proporciona especial
ToStringSerializer
(com.fasterxml.jackson.databind.ser.std.ToStringSerializer
)Ejemplo:
fuente
jackson-annotations proporciona
@JsonFormat
que puede manejar muchas personalizaciones sin la necesidad de escribir el serializador personalizado.Por ejemplo, solicitar una
STRING
forma para un campo con tipo numérico generará el valor numérico como cadenaresultará en la salida deseada
fuente
Agregue un
@JsonProperty
captador anotado, que devuelve unString
, para elfavoriteNumber
campo:fuente
En caso de que no desee contaminar su modelo con anotaciones y desee realizar algunas operaciones personalizadas, puede usar mixins.
Edad de anulación:
Haz lo que necesites con la edad:
fuente
con la ayuda de @JsonView podemos decidir campos de clases modelo para serializar que satisfagan los criterios mínimos (tenemos que definir los criterios) como si pudiéramos tener una clase central con 10 propiedades pero solo se pueden serializar 5 propiedades que son necesarias para el cliente solamente
Defina nuestras Vistas simplemente creando la siguiente clase:
Clase de modelo anotada con vistas:
Ahora tenemos que escribir un convertidor json personalizado simplemente extendiendo la clase HttpMessageConverter desde spring como:
Ahora es necesario decirle a Spring que use esta conversión json personalizada simplemente colocándola en dispatcher-servlet.xml
Así es como podrá decidir qué campos serializar.
fuente