2013-08-19 8 views
15

Следуя по этому вопросу: Question hereДжексон десериализации JsonIdentityReference (alwaysAsId = истинный)

@JsonIdentityReference(alwaysAsId = true) и @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class) прекрасно работает с конца сериализации, но не так хорошо, когда приходит время десериализации, так как она не может разрешить Ссылка на идентификатор объекта.

Есть ли способ получить это для десериализации? Написание пользовательского десериализатора кажется излишним.

ответ

8

Вместо пользовательского десериализатор, вы можете использовать простую сеттер десериализатор:

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

Пример Строка {"foo":"id1"} правильно сериализовать с помощью этого метода в Jackson 2.5.2

+0

Это не работает, если Foo имеет больше свойств, чем просто идентификатор и, следовательно, существующие экземпляры должны быть связаны. – koppor