Ho una semplice interfaccia con getter e setter per una proprietà.Ignorare la proprietà durante la deserializzazione
public interface HasMoney {
Money getMoney();
void setMoney(Money money);
}
Ho un altro UserAccount di classe che implementa questa interfaccia.
public class UserAccount implements HasMoney {
private Money money;
@Override
Money getMoney() // fill in the blanks
@Override
void setMoney(Money money) // fill in the blanks
}
Il mio problema è che voglio serializzare la proprietà soldi ma ignora durante la deserializzazione esso vale a dire, non accettiamo i valori da parte dell'utente per questa proprietà. Ho provato @JsonIgnore su setter e @JsonIgnore (false) sul getter, lo ignora ma lo fa anche durante la serializzazione.
Ho provato @JsonIgnore sul setter e @JsonProperty sul getter solo per dire esplicitamente a Jackson che intendiamo tenere traccia di questa proprietà, che sembra bloccare l'applicazione quando la proprietà money viene inviata al server e Jackson prova a deserializzarlo vomitare MalformedJsonException: impossibile costruire l'oggetto di tipo Money.
La cosa più bizzarra è che mettere @JsonIgnore sul setter e @JsonProperty sul setter funziona nella maggior parte dei casi quando la proprietà è primitiva.
Questo è in realtà parte della soluzione. Ho anche dovuto aggiungere objectMapper.disable (MapperFeature.USE_GETTERS_AS_SETTERS) e ha funzionato allora. Per favore modifica la tua risposta e io la accetterò. E 'triste che non ci sia un modo più pulito per questo (Atleast I non è stato in grado di trovarlo). –
@NishantNagwani - dispari, funziona per me senza quella funzione abilitata. Sto aggiungendo una nota opzionale alla mia risposta, ma sono curioso di sapere se qualcosa è diverso nella tua configurazione che richiederebbe 'USE_GETTERS_AS_SETTERS'. – Perception
L'ho provato di nuovo. Non funziona con il mio ambiente. Sto usando jackson 2.1.1. Ecco l'errore che ricevo { "message": "JSON non valido passato al server, tipo di dati errato utilizzato: \ nProblem deserializing 'setterless' property 'money': get metodo restituito null (attraverso la catena di riferimenti: com.abc. def.Money]) " } –