gpt4 book ai didi

java - jackson 无法用连字符反序列化字段

转载 作者:行者123 更新时间:2023-11-30 06:06:42 26 4
gpt4 key购买 nike

在下面的代码中,生成的 orderObj 没有合约 ID、订单号详细信息。它仅对带有连字符的字段进行反序列化。据我所知@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",
}

最佳答案

正如评论中所讨论的,您的 ObjectMapper 似乎已配置为使用 JaxbAnnotationIntrospector,它将查找例如@XmlElement 而不是 @JsonPropertyid 字段仍然有效,因为它的字段名称在 JSON 和 Java 之间匹配。

您应该能够通过简单地删除此行来解决该问题:

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

关于java - jackson 无法用连字符反序列化字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51163351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com