java里json字符串转java对象后字段为空的解决方法

一、前言

最近用到了json字符串转java对象的方法。

import com.alibaba.fastjson2.JSON;



//String resultObjectJosn = JsonUtil.getJSONString(resultObject.getResultObject());
String resultObjectJosn = "{\"ShippingDate\":\"20250801\",\"OverseaConsignment_Addr1\":\"xxx\"}";;
List<ShippingInfoDto> shippingInfoDtos = JSON.parseArray(resultObjectJosn, ShippingInfoDto.class);

大概就这个意思,调用了个接口查询回来json字符串,然后需要转为javabean对象。

因为返回的json字符串比较奇葩,不是按照驼峰规则的,而是ShippingDateOverseaConsignment_Addr1这种,所以转换后对应的javabean字段总是为空。

二、错误的解决方法

查了下gpt,解决方法是有的,但是是错误的。
记录下,避免这个错误。

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;

@Data
public class ShippingInfoDto {
  
    @JSONField(name = "ShippingDate")
    private String ShippingDate;
    
    @JSONField(name = "OverseaConsignment_Addr1")
    private String OverseaConsignment_Addr1;
}

gpt给的解决方法是,因为用的是fastjson2,所以用注解
@JSONField,加上就能转换成功了。

实际测试发现,并不行。
JSON.parseArray转出来的javabean对象,对应的值还是null。

三、正确的解决方法

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;

@Data
public class ShippingInfoDto {
 
    private String ShippingDate;

    private String OverseaConsignment_Addr1;

    public String getShippingDate() {
        return ShippingDate;
    }

    //TODO 还有很多没有值,用到字段记得加
    @JSONField(name = "ShippingDate")
    public void setShippingDate(String shippingDate) {
        ShippingDate = shippingDate;
    }

    public String getOverseaConsignment_Addr1() {
        return OverseaConsignment_Addr1;
    }

    //TODO 还有很多没有值,用到字段记得加
    @JSONField(name = "OverseaConsignment_Addr1")
    public void setOverseaConsignment_Addr1(String overseaConsignment_Addr1) {
        OverseaConsignment_Addr1= overseaConsignment_Addr1;
    }
}

经过测试,这样才是正确的解决方法,注解加到set方法上才行。

虽然有@Data注解,不用写get和set方法也行;
但是把@JSONField注解加到变量上还是不行,转换后没有值;
只有加在set方法上,才能转换时把json对应的值设置给javabean。

四、总结

1.注解要与json转换方法匹配;本例子用的是import com.alibaba.fastjson2.JSON;

2.json返回值不是驼峰规则,默认转换后javabean的变量值为空时;
只把javabean的变量名改成与json一致没有用(原本的shippingDate或者改成ShippingDate都不行);
需要给set方法加 @JSONField注解,才能把json里的值获取到(ShippingDate)、设置给javabean。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想永不停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值