2013-03-07 1 views
55

Utilizzando jackson 2.1, come si disabilita lo fail_on_empty beans che il messaggio di errore sembra voler disabilitare?jackson disable fail_on_empty_beans

Presumo che questa sia solo la cosa più semplice del mondo, ma diavolo è tardi e non sono stato in grado di trovare un semplice tutorial o qualcosa di particolarmente ovvio dal api. SerializationFactory? Perché dovrebbero renderlo così intuitivo e quindi rendere il messaggio di errore sembrare così semplice?

Sebbene I do come il messaggio di errore, intendo, è migliore di un NPE.

Sto assumendo che ci sia un modo per farlo usando le annotazioni - ma non sono entusiasta di usarli affatto per il lavoro semplicistico che sto facendo!

risposta

64

Si può fare questo per classe o globalmente, credo.

Per classe, provare @JsonSerialize sopra la dichiarazione della classe.

Per un mapper, ecco un esempio:

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) 

Il collegamento StackOverflow qui sotto ha anche un esempio per un progetto di primavera.

Per REST con Jersey, non mi ricordo dall'alto la testa, ma credo che sia simile.


paio di link I scavato: (a cura primo collegamento a causa di Codehaus spegnimento).

+0

L'ho usato prima oggi, ha alcune informazioni in più, ad es. scoperta automatica. http://stackoverflow.com/questions/4362104/strange-jackson-exception-being-thrown-when-serializing-hibernate-object – Pancakeo

+0

Puoi fare un esempio su come usare '@ JsonSerialize' per disabilitare' FAIL_ON_EMPTY_BEANS' sulla classe dichiarazione? – tuk

+1

Conosci alcuni anni :). Questo potrebbe aiutare: http: // StackOverflow.it/questions/12162413/jackson-use-jsonserialize-inclusion-non-null-except-for-one-class – Pancakeo

14

È inoltre possibile ottenere lo stesso problema se la classe non contiene metodi/proprietà pubbliche. Normalmente ho DTO dedicati per le richieste e le risposte API, dichiarate pubbliche, ma in un caso ho dimenticato di rendere pubblici anche i metodi, il che ha causato in primo luogo il bean "vuoto".

+1

Questa è la risposta corretta per questa domanda. –

7

È possibile anche annotare probabilmente la classe con @JsonIgnoreProperties(ignoreUnknown=true) di ignorare i campi unificati nella classe

+0

Questo non funzionerà se l'intero bean è effettivamente nullo – maryoush

0

Nel mio caso, ho perso di scrivere @JsonProperty annotazioni in uno dei campi, che stava causando questo errore.

0

Se si utilizza org.codehaus.jackson.map.ObjectMapper, quindi pls. utilizzare le seguenti linee

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

aggiunta di una soluzione qui per un problema diverso, ma uno che si manifesta con lo stesso errore ... Fare attenzione quando si costruisce JSON al volo (come risposte API o qualsiasi altra cosa) per sfuggire letterale doppia citazioni nei membri della stringa. Potresti consumare il tuo json malformato.