2013-08-19 7 views
15

Nawiązując do tej kwestii: Question hereJackson deserializowania JsonIdentityReference (alwaysAsId = true)

@JsonIdentityReference(alwaysAsId = true) i @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class) działa świetnie od końca serializacji, ale nie tak dobrze, kiedy przychodzi czas na deserializowania ponieważ nie można rozwiązać Odniesienie do obiektu.

Czy istnieje sposób, aby to przekształcić z postaci szeregowej? Zapisywanie niestandardowego deserializatora wydaje się przesadą.

Odpowiedz

8

Zamiast niestandardowym Deserializatora, można użyć prostego seter Deserializator:

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); 
    } 
} 

Przykład ciąg {"foo":"id1"} jest seryjny właściwie z tej metody w Jackson 2.5.2

+0

ten nie działa, jeśli Foo ma więcej właściwości niż tylko identyfikator, a więc istniejące instancje muszą być połączone. – koppor

Powiązane problemy