Джерси 2 с проблемой сериализации Джексона

Инструменты:

Веблогик 12c

Джерси 2.21.1

Джексон 2

public class Profile implements Serializable
{

    private List<Status> orderStatus;

    public void setOrderStatus(List<Status> orderStatus)
    {
        this.orderStatus = orderStatus;
    }

    public void getOrderStatus()
    {
        return orderStatus;
    }

У меня есть простой класс POJO, как указано выше. Я столкнулся с проблемой ниже при использовании Jersey 2 with Jackson.

1) Когда класс Profile сериализуется, JSON создается как: {"OrderStatus":[{}]}

2) Таким образом, сгенерированный ключ OrderStatus, а не orderStatus

3) Когда этот JSON десериализуется, он выдает ошибку -

Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OrderStatus" since it cannot 
find field with OrderStatus but has field as orderStatus

I have tried adding : 

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY,getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE)

надеясь, что сериализация будет использовать только поля в качестве ключа (и не будет использовать свойство), а JSON будет сгенерирован как {"orderStatus":[{}]} .

Но он не работает и выдает ту же ошибку. Есть ли способ сериализовать POJO с ключом как с полями, а не со свойствами.

Кто-нибудь может помочь здесь?


person Atul    schedule 04.07.2018    source источник


Ответы (1)


Если вы хотите убедиться, что orderStatus — это имя, используйте специальное JsonProperty:

 @JsonProperty("orderStatus")
 public void getOrderStatus()

@JsonProperty (также указывает, что свойство должно быть включено) используется для указания имени внешнего свойства.

person user7294900    schedule 04.07.2018
comment
Итак, Джексон будет использовать метод getter только для сериализации, а не для использования полей? - person Atul; 04.07.2018
comment
@Atul Jackson найдет JsonProperty для этого поля и использует его значение для экстернализации поля. - person user7294900; 04.07.2018