Как сопоставить имена полей JSON с различными именами полей объекта? - PullRequest
35 голосов
/ 16 марта 2012

Каков эквивалентный способ в аннотации json Джексона для следующих аннотаций jax-b?

Мне нужно создать json, а не xml, и мне нужно знать обычные аннотации Джексона, которые эквивалентно обозначаются в jax-b..

  1. переименуйте поле.
  2. используйте получатели вместо полей.

Эти функции особенно важны, если имя элемента json / xml является javaзарезервированное слово типа "new", "public", "static" и т. д.

Так что мы должны назвать поля POJO как "_new_", "_public_", "_static_"и т. д. соответственно

, но используйте аннотацию jax-b, чтобы переименовать их обратно в «новые», «публичные», «статические» и т. д. в сгенерированных элементах XML (и json).

Переименование поля

@XmlAccessorType(XmlAccessType.FIELD)
public class Person{
    @XmlElement(required = true)
    protected String name;
    @XmlElement(required = true)
    protected String address;
    @XmlElement(name = "contractor")
    protected boolean _restricted_ ;
    @XmlElement(name = "new")
    protected boolean _new_ ;
}

Перенаправление на использование свойства getter (я думаю, именно так это и делается в jax-b)

@XmlAccessorType(XmlAccessType.PROPERTY)
public class Person{
    protected String name;
    protected String address;
    protected boolean _restricted_ ;
    protected boolean _new_ ;

    @XmlElement(required = true)
    protected String getName() {return name;}
    @XmlElement(required = true)
    protected String getAddress() {return address;}
    @XmlElement(name = "contractor")
    protected boolean getRestricted() {return _restricted_;}
    @XmlElement(name = "new")
    protected boolean getNew(){return _new_;}
}

Ответы [ 3 ]

84 голосов
/ 19 июля 2012

Возможно, это немного поздно, но в любом случае ..

вы можете переименовать свойство, просто добавив

@JsonProperty("contractor")

И по умолчанию Джексон использует метод получения и установки для сериализации и десериализации.

Для более подробной информации: http://wiki.fasterxml.com/JacksonFAQ

1 голос
/ 23 февраля 2019

Обратите внимание, что для этого нужно использовать JavaEE API: javax.json.bind.annotation.JsonbProperty.Конечно, Джексон и другие являются лишь некоторыми реализациями JSON Binding API, они, вероятно, будут соответствовать этому.

1 голос
/ 26 сентября 2018

В некоторых примерах вы также можете использовать в нем getter и setter, чтобы переименовать его в другое поле

public class Sample {

    private String fruit;

    @JsonProperty("get_apple")
    public void setFruit(String fruit) {
        this.fruit = fruit;
    }

    @JsonProperty("send_apple")
    public String getFruit() {
        return fruit;
    }

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