java - Jackson objectMapper 将不同的 json 属性映射到同一个 pojo
问题描述
我有一个非常简单的 json,我试图将它映射到一个对象。
JSON:
[
{
"cust_lpid": "0119b9f7f99ad2161de7b0b",
"cust_uid": "soumavtestflow"
}
]
我的映射器类:
@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomerSegmentRequest {
@JsonProperty("LPID")
String cust_lpid;
@JsonProperty("UserId")
String cust_uid;
public String getCust_lpid() {
return cust_lpid;
}
public void setCust_lpid(String cust_lpid) {
this.cust_lpid = cust_lpid;
}
public String getCust_uid() {
return cust_uid;
}
public void setCust_uid(String cust_uid) {
this.cust_uid = cust_uid;
}
}
当我做一个
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
LPIDCustIDMapper[] custSegResp = objectMapper.readValue(responseBody,CustomerSegmentRequest [].class);
我没有在 custSegResp 中填充任何值。
但是,当我删除@JsonProperty
它时,它可以工作。我需要 json 属性名称来映射传入请求,因此不想创建单独的映射类。有没有办法达到同样的效果?
解决方案
@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomerSegmentRequest {
@JsonAlias({"cust_lpid", "LPID" })
String cust_lpid;
@JsonAlias({"cust_uid", "UserId" })
String cust_uid;
public String getCust_lpid() {
return cust_lpid;
}
public void setCust_lpid(String cust_lpid) {
this.cust_lpid = cust_lpid;
}
public String getCust_uid() {
return cust_uid;
}
public void setCust_uid(String cust_uid) {
this.cust_uid = cust_uid;
}
}
推荐阅读
- sql - 在 vb.net 中使用选择查询
- terraform - 尽管 cloud-init,Digital Ocean Droplet 不是最新的
- exchangewebservices - Microsoft Exchange Web Services 确保电子邮件发送成功
- amazon-web-services - 如何检索使用其标签过滤的 AWS IAM 角色详细信息
- arrays - 将 Mongo DB 数组元素与自身进行比较,以在文档中查找特定字段中具有不同值的数组
- django - 无法使用 cbv 在 django 中查看我的模型对象
- c# - WebSocket.ReceiveAsync - 如何使用 ValueTask 覆盖?
- javascript - 使用 React.js 在 Firebase 上的实时数据库中删除文件
- java - Amplitude + Java SDK :在设置用户属性时将 $price、$quantity 和 $revenue 等不需要的属性设置为零
- react-native - 如何从@react-native-community/datetimepicker 获取日期值并将其存储在对象中以供用户使用