2012-02-15 3 views
8

Abbiamo appena spostato alcune dipendenze Maven, che ha attivato un aggiornamento di Jackson da 1.7.x alla 1.9.xJackson @JsonIgnore ha cambiato la semantica?

Abbiamo utilizzato per annotare @JsonIgnore sui metodi setter, sui metodi non supposti essere impostato dal lato client. per esempio: il proprietario di un oggetto (con deve essere impostato dal principal di autenticazione), ecc.

Ci sembra che il semanthinc di questa annotazione sia cambiato, è possibile? ora il campo è stato jsonignored in ogni caso, e non solo quando viene impostato.

è che il caso? c'è un modo alternativo in 1.9 per implementare solo SET ignorato?

grazie! r.

+0

State aggiungendo l'annotazione @JsonProperty sul campo o il getter? –

+0

Lo aggiungo al setter. Che impedisce di essere impostato durante la de-serializzazione in 1.7.x – Rafael

risposta

8

Ok, penso di aver trovato una menzione esplicita a questo problema in javadoc. (la documentazione di Jackson non è facile da esaminare).

Inoltre, a partire da Jackson 1.9, se questa è l'unica annotazione associata a una proprietà, sarà anche causare causare l'intera proprietà ad essere ignorati: cioè, se setter ha questa annotazione e getter non ha annotazioni anche il getter viene ignorato in modo efficace. È ancora possibile che diversi utenti di accesso utilizzino annotazioni diverse; quindi se solo "getter" deve essere ignorato, gli altri accessor (setter o campo) necessitano di un'annotazione esplicita per prevenire l'ignoranza (solitamente JsonProperty).

+4

corretto. Questo è stato il grande cambiamento in 1.9 (che col senno di poi forse avrebbe dovuto aspettare fino al 2.0). Per ottenere ciò che si desidera ("split accessors"), è necessario aggiungere esplicitamente '@ JsonProperty' su getter - l'impostazione predefinita è assumere che se viene trovata una sola annotazione pertinente, si applica a tutte le parti di una proprietà" completa " . – StaxMan