serializationfeature non_null jsonserialize fail_on_empty_beans discovered disable desactivar create como beanserializer java jackson

java - fail_on_empty_beans - jsonserialize inclusion non_null



¿Cómo desactivo fail_on_empty_beans en Jackson? (8)

Usando jackson 2.1, ¿cómo desactivo los fail_on_empty beans que el mensaje de error parece querer que deshabilite?

Asumo que esto es lo más simple del mundo, pero es tarde y no he podido encontrar un tutorial simple o algo particularmente obvio de la api . SerializationFactory ? ¿Por qué lo hacen tan poco intuitivo y luego hacen que el mensaje de error parezca tan directo?

Aunque me gusta el mensaje de error, quiero decir, es mejor que un NPE.

Estoy asumiendo que hay una manera de hacer esto usando anotaciones, ¡pero no estoy dispuesto a usarlas en absoluto para el trabajo simplista que estoy haciendo!


Agregando una solución aquí para un problema diferente, pero que se manifiesta con el mismo error ... Tenga cuidado cuando construya json sobre la marcha (como respuestas de API o lo que sea) para escapar de las comillas dobles en sus miembros de cadena. Puede estar consumiendo su propio json malformado.


En mi caso, me olvidé de escribir la anotación @JsonProperty en uno de los campos que causaba este error.


Para solucionar este problema, configure su clase JsonDataFormat como a continuación ObjectMapper mapper = new ObjectMapper (); mapper.disable (SerializationFeature.FAIL_ON_EMPTY_BEANS);


Puedes hacer esto por clase o globalmente, creo.

Para cada clase, prueba @JsonSerialize encima de la declaración de clase.

Para un mapeador, aquí hay un ejemplo:

ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // do various things, perhaps: String someJsonString = mapper.writeValueAsString(someClassInstance); SomeClass someClassInstance = mapper.readValue(someJsonString, SomeClass.class)

El siguiente enlace de también tiene un ejemplo para un proyecto de Spring.

Para REST con Jersey, no me acuerdo de la parte superior de mi cabeza, pero creo que es similar.

Un par de enlaces que desenterré: (primer enlace editado debido al cierre de Codehaus).


Si está utilizando Spring Boot, puede establecer la siguiente propiedad en el archivo application.properties. spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false


Si usa org.codehaus.jackson.map.ObjectMapper, entonces pls. usa las siguientes líneas

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);


También puede anotar la clase con @JsonIgnoreProperties(ignoreUnknown=true) para ignorar los campos indefinidos en la clase


También puede obtener el mismo problema si su clase no contiene ningún método / propiedades públicas. Normalmente tengo DTO dedicados para solicitudes y respuestas API, declarados públicos, pero olvidé en un caso hacer públicos los métodos también, lo que provocó que el frijol "vacío" en primer lugar.