2013-08-19 19 views
15

Facendo seguito a questa domanda: Question hereJackson deserializzare JsonIdentityReference (alwaysAsId = true)

@JsonIdentityReference(alwaysAsId = true) e @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class) grandi opere a partire dalla fine di serializzazione, ma non così bene quando arriva il momento di deserializzare in quanto non può risolvere il Riferimento ID oggetto.

C'è un modo per farlo deserializzare? Scrivere un deserializzatore personalizzato sembra eccessivo.

risposta

8

Invece di un deserializzatore personalizzato, è possibile utilizzare un semplice deserializzatore setter:

public class Container { 
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") 
    @JsonIdentityReference(alwaysAsId = true) 
    private Foo foo; 

    public Foo getFoo() { 
     return foo; 
    } 
    public Container setFoo(Foo foo) { 
     this.foo = foo; 
     return this; 
    } 
    @JsonProperty("foo") 
    public void setFoo(String id) { 
     foo = new Foo().setId(id); 
    } 
} 

stringa Esempio di {"foo":"id1"} viene serializzato correttamente con questo metodo in Jackson 2.5.2

+0

Questo non funziona se Foo ha più proprietà di solo l'id e, quindi, le istanze esistenti devono essere collegate. – koppor

Problemi correlati