使用ObjectMapper转换JSON字符串通过实体类接收

在将JSON字符串转换为Java实体类时,遇到ObjectMapper无法识别字段的问题。原因是JSON字段名与Java实体类字段名不匹配。解决办法是在实体类中使用@JsonProperty注解建立映射。此外,当使用Lombok时,注意其生成的getter方法遵循JavaBean命名规则,可能需要使用特定方法访问属性。
String s="{
    "StatusCode": true,
    "Datas": [
        {
            "Status": "未核单",
            "StatusCode": true,
            "TrackingNumber": "654144534060607480",
            "Amt": "19.000",
            "OtherAmt": "0.000",
            "CcyCode": "RMB",
            "Weight": "0.030"
        },
        {
            "Status": "未核单",
            "StatusCode": true,
            "TrackingNumber": "6540606123407491",
            "Amt": "19.000",
            "OtherAmt": "0.000",
            "CcyCode": "RMB",
            "Weight": "0.050"
        },
        {
            "StatusCode": false,
            "TrackingNumber": "365012345565802",
            "Message": "该单号系统中不存在!"
        }
    ]
}";


ObjectMapper objectMapper = new ObjectMapper();
getOrderWeightAndAmt weightAndAmt = objectMapper.readValue(s,getOrderWeightAndAmt.class);

 getOrderWeightAndAmt 和getOrderWeightAndAmtData两个实体类

@Data
public class getOrderWeightAndAmt {

    private boolean StatusCode;
    private List<getOrderWeightAndAmtData > Datas;
}
@Data
public class getOrderWeightAndAmtData {

    private String Status;
    private boolean StatusCode;
    private String TrackingNumber;
    private String Amt;
    private String OtherAmt;
    private String CcyCode;
    private String Weight;
    private String Message;
}

 使用objectMapper.readValue()转化时会发生报错,提示实体类中有未识别的字段

Unrecognized field "StatusCode" (class net.hisnn.erp.model.auto.getOrderWeightAndAmt), not marked as ignorable (2 known properties: "datas", "statusCode"])

出现这个问题的原因是JSON数据中的字段名与Java对象中的字段名无法匹配
 

解决这个问题需要在实体类中添加@JsonProperty()注解,在Java对象和JSON数据之间建立映射关系

修改后的的实体类代码为:
 

@Data
public class getOrderWeightAndAmt {
    @JsonProperty("StatusCode")
    private Boolean StatusCode;
    @JsonProperty("Datas")
    private List<getOrderWeightAndAmtData> Datas;


}
@Data
public class getOrderWeightAndAmtData {
    @JsonProperty("Status")
    private String Status;
    @JsonProperty("StatusCode")
    private Boolean StatusCode;
    @JsonProperty("TrackingNumber")
    private String TrackingNumber;
    @JsonProperty("Amt")
    private String Amt;
    @JsonProperty("OtherAmt")
    private String OtherAmt;
    @JsonProperty("CcyCode")
    private String CcyCode;
    @JsonProperty("Weight")
    private String Weight;
    @JsonProperty("Message")
    private String Message;

}

注意事项:是Lombok在生成getter和setter方法时的会出现特殊情况。

对于boolean、Boolean类型的属性,Lombok生成的getter方法的命名规则是isXxx()而不是getXxx()。这是为了符合JavaBean的命名约定。

在使用Lombok的类中直接使用isXxx()setXxx()方法来访问和设置对应对象属性的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值