Джексон не может десериализовать поля с дефисом - PullRequest
0 голосов
/ 04 июля 2018

В приведенном ниже коде результирующий orderObj не имеет номера контракта, номера заказа. Только десериализованы поля с дефисами. Насколько мне известно, @jsonproperty должен отображаться.

Пожалуйста, помогите получить все поля в моем результате orderObj.

import com.fasterxml.jackson.annotation.JsonProperty;

public class Order implements Serializable {

    private static final long serialVersionUID = 6791737023394030929L;

    @JsonProperty("id")
    private String id;

    @JsonProperty("contract-id")
    private String contractId;

    @JsonProperty("order-number")
    private String orderNumber;
}


final ObjectMapper mapper = new ObjectMapper();
mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(mapper.getTypeFactory()));
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);

Response response = orderServiceTarget.queryParam("contract-id",contractId).request().accept(MediaType.APPLICATION_JSON).headers(headersMap).get();
final String serverResponseStr = response.readEntity(String.class);
Order  orderObj = objectMapper.readValue(serverResponseStr, Order.class); 

Объект результата: отсутствуют другие поля,

{
    "id": "7FABA1724B8F15306447852233",
}

Вот ответ сервера:

{
    "id": "7FABA1724B8F15306447852233",
    "contract-id": "42BAD9AAA5231BD",
    "order-number": "ADD",
    "market-segment": "COM",
}

1 Ответ

0 голосов
/ 04 июля 2018

Как обсуждалось в комментариях, похоже, что ваш ObjectMapper настроен на использование JaxbAnnotationIntrospector, который будет искать, например, @XmlElement вместо @JsonProperty. Поле id по-прежнему работает, поскольку его имя совпадает между JSON и Java.

Вы должны быть в состоянии решить проблему, просто удалив эту строку:

mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(mapper.getTypeFactory()));
...