El comportamiento de jackon predeterminado parece utilizar tanto propiedades (getters y setters) como campos para serializar y deserializar a json.
Me gustaría usar los campos como la fuente canónica de la configuración de serialización y, por lo tanto, no quiero que Jackson vea las propiedades en absoluto.
Puedo hacer esto en una clase individual con la anotación:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Pero no quiero tener que poner esto en cada clase ...
¿Es posible configurar esto globalmente? ¿Te gusta agregar algunos al Object Mapper?
INFER_PROPERTY_MUTATORS
bandera. Obliga a la visibilidad de los colocadores si hay un captador o campo visible.Respuestas:
Puede configurar ObjectMappers individuales de esta manera:
Si desea establecerlo globalmente, generalmente accedo a un asignador configurado a través de una clase de contenedor.
fuente
withGetterVisibility
no cubreis*
métodos, pero haywithIsGetterVisibility
para ellos.setVisibilityChecker
es obsoleto. Usar en susetVisibility
lugar.En Jackson 2.0 y versiones posteriores, simplemente puede usar:
para desactivar la autodetección.
fuente
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
continuación, debe anotar cada propiedad que desea incluir@JsonProperty
Específicamente para
boolean is*()
captadores:He dedicado mucho tiempo a por qué ni a continuación
ni esto
trabajé para mi Boolean Getter / Setter.
La solución es simple:
ACTUALIZACIÓN: spring-boot permitió configurarlo:
Ver Propiedades de aplicación comunes # JACKSON
fuente
para jackson 1.9.10 yo uso
a la vuelta de autodedection.
fuente
¿Qué tal esto? Lo usé con un mixin
objeto no conforme
Mixin:
Uso:
No hay nada que diga que no se puede predecir cualquier cantidad de clases y aplicar el mismo mixin.
Si no está familiarizado con mixins, son conceptualmente simple: La estructura del mixin se impuso súper en la clase de objetivo (de acuerdo con Jackson, no en lo que se refiere a la JVM).
fuente
Si desea una manera de hacer esto globalmente sin preocuparse por la configuración de su
ObjectMapper
, puede crear su propia anotación:¡Ahora solo tienes que anotar tus clases
@JsonExplicit
y listo!También asegúrese de editar la llamada anterior para
@JsonAutoDetect
asegurarse de tener los valores establecidos para lo que funciona con su programa.Gracias a https://stackoverflow.com/a/13408807 por ayudarme a conocer
@JacksonAnnotationsInside
fuente
Si usa Spring Boot, puede configurar Jackson globalmente de la siguiente manera:
fuente