Подтвердить что ты не робот

Джексон deserialize JsonIdentityReference (alwaysAsId = true)

Следуя этому вопросу: Вопрос здесь

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

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

4b9b3361

Ответ 1

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

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