posso solo pensare a una soluzione non-Jackson, per usare una classe base che non ha riferimenti per la mappatura e poi gettato alla classe reale:
// expect a B on an incoming request
class B {
// ...
}
// after the data is read, cast to A which will have empty references
class A extends B {
public Map<String,List<String>> references;
}
Perché invii persino i riferimenti se non li vuoi?
Oppure i dati in arrivo dalle tue mani e vuoi solo evitare l'eccezione di mappatura che ti dice che Jackson non riesce a trovare una proprietà da impostare per i riferimenti in entrata? Per questo usiamo una classe base che tutte le nostre classi del modello JSON ereditano:
public abstract class JsonObject {
@JsonAnySetter
public void handleUnknown(String key, Object value) {
// for us we log an error if we can't map but you can skip that
Log log = LogFactory.getLog(String.class);
log.error("Error mapping object of type: " + this.getClass().getName());
log.error("Could not map key: \"" + key + "\" and value: \"" + "\"" + value.toString() + "\"");
}
Poi nel POJO si aggiunge @JsonIgnoreProperties
in modo che le proprietà in arrivo avranno trasmesso al handleUnknown()
@JsonIgnoreProperties
class A extends JsonObject {
// no references if you don't need them
}
edit
This SO Thread descrive come utilizzare Mixins. Questa potrebbe essere la soluzione, se vuoi mantenere la tua struttura esattamente com'è, ma non l'ho ancora provata.
Proprio così. I dati in arrivo non sono nelle nostre mani. Ma i client inviano sempre un attributo referenze nel formato corretto in modo che handleUnknown non venga mai chiamato. – guerilla
Ah, il mio male, ho dimenticato un po 'di informazioni. È necessario '@ JsonIgnoreProperties' nel POJO se si desidera ignorare i dati in entrata. Aggiornerò il mio post (PS: usiamo questo per consumare la risorsa REST di Facebook e tutte le proprietà inviate da facebook che non sono contenute nel nostro POJO verranno appena registrate e quindi decidiamo se vogliamo aggiungerle o meno) – Pete
Ma i riferimenti sono nel mio POJO quindi corrisponde sempre al setter – guerilla