Перегруженные сеттеры на объекте Джексона - PullRequest
0 голосов
/ 27 октября 2018

Я не уверен, возможно ли это, но я хотел бы иметь перегруженный установщик на десериализуемом объекте Джексона. Так что в зависимости от объекта в этом поле он десериализуется по-разному.

* ** 1003 тысяча два * Пример
public class Thing {
    private MyObject1 object;

    public MyObject1 getObject() {
        return object;

    public void setObject(MyObject1 object) {
        this.object = object;
    }

    public void setObject(MyObject2 object) {
        this.object = translate1To2(object);
    }
}

Если это невозможно, кто-нибудь предложит мне альтернативный подход? Меня беспокоит то, что в простом случае, когда существует только один установщик, Джексону не нужно выбирать, какой объект десериализовать JSON, так что не уверен, сможет ли он вообще.

ОБНОВЛЕНИЕ: приведенное выше дает com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "object" как есть.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Поскольку на самом деле вы не можете перегрузить сеттеры, подобные этому, в Джексоне, мое решение было следующим:

Я сделал десериализатор для перевода MyObject2 в MyObject1 и у меня был один установщик, поэтому мой класс выглядел так:

public class Thing {

    @JsonDeserialize(using = MyObjectDeserializer.class)
    private MyObject1 object;

    public MyObject1 getObject() {
        return object;

    public void setObject(MyObject1 object) {
        this.object = object;
    }
}
0 голосов
/ 29 октября 2018

Лучший способ, я думаю, это добавить класс специальной десериализации

@JsonDeserialize(using = ThingDeserializer.class)
public class Thing {
...
}

Пример десериализации здесь https://www.baeldung.com/jackson-deserialization

Тогда ваш бин будет всегда чистым, и вы создадите свой собственный JSON, как хотите, чтобы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...