杰克逊无法使用连字符对字段进行反序列化

在下面的代码中,结果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",

}


汪汪一只猫
浏览 126回答 1
1回答

慕勒3428872

正如评论中所讨论的,您似乎ObjectMapper已配置为使用JaxbAnnotationIntrospector,它将查找例如@XmlElement而不是@JsonProperty。该id字段仍然有效,因为其字段名称在JSON和Java之间匹配。您只需删除以下行就可以解决此问题:mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(mapper.getTypeFactory()));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java