Вывести поле в несколько json полей - PullRequest
1 голос
/ 25 марта 2020

Есть ли способ, используя аннотации Джексона, чтобы данное поле было сериализовано в поля 2 json.

Как обратный @JsonAlias, который десериализуется , кратный json поле к одному полю.

Например,

class Foo {
    @SomeAnnotation("field2")
    String field1;
}

, сериализуемое как:

{
    "field1" : "xyz",
    "field2" : "xyz"
}

Есть ли что-то вроде @SomeAnnotation?

——

Примечание: это не «должен», я делаю это (это навязанное требование), это «как», я делаю это (элегантно).

1 Ответ

2 голосов
/ 25 марта 2020

Простым решением этого может быть добавление двух геттеров для field1:

class Foo {
    private String field1 = "blah";

    public String getField1() {
        return field1;
    }

    public String getField2() {
        return field1;
    }
}

Джексон создаст поле для каждого геттера, следуя соглашению об именах javabeans:

{"field1":"blah","field2":"blah"}

Альтернативой этому может быть @com.fasterxml.jackson.annotation.JsonAnyGetter, который может предоставить вам еще большую гибкость:

class Foo {
    private String field1 = "blah";

    public String getField1() {
        return field1;
    }

    @JsonAnyGetter
    public Map<String, Object> getAny() {
        Map<String, Object> m = new HashMap<>();
        m.put("field2", this.field1);
        m.put("field3", this.field1.toUpperCase());

        return m;
    }
}

Производство:

{"field1":"blah","field3":"BLAH","field2":"blah"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...