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

Как сопоставить имена полей JSON для разных имен полей объектов?

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

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

  • переименуйте поле.
  • использовать getters вместо полей.

Эти функции особенно важны, если имя элемента 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_;}
}
4b9b3361

Ответ 1

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

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

@JsonProperty("contractor")

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

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

Ответ 2

В некоторых примерах вы также можете использовать его в 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;
    }

}

Ответ 3

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