1,背景
最近发生了一件很奇怪的事:我们的服务向第三方发送请求参数时,第三方接收到的字段是首字母大写的 AppDtoList ,但我们需要的是小写的 appDtoList 。这套代码是从其他项目A原封不动复制过来的,我们仔细核对了项目A中 ApplyReq 的字段定义和业务代码,发现两者基本一模一样。然而,项目A传输过去的参数字段首字母是小写的 appDtoList ,而我们这边传输的却是大写的 AppDtoList。
部分代码
java
@ApiModelProperty(value = "列表", required = true)
private List<AppDto> appDtoList;
java
public static void main(String[] args) {
ApplyReq req = new ApplyReq ();
List<AppDto> appDtoList= new ArrayList<>();
req.setAppDtoList(appDtoList);
System.out.println(JSON.toJSONString(req));
}
打印结果:
{"AppDtoList":[]}
2,原因
经过争论,发现是引入的JSON包不一样,我用的是
import com.alibaba.fastjson2.JSON;
项目A用的是import com.alibaba.fastjson.JSON;
这真是坑惨了,也涨教训了,如果不想换导入包,可以在字段上面加注解,也可以解决问题
java
@ApiModelProperty(value = "列表", required = true)
@JSONField(name = "appDtoList")
private List<AppDto> appDtoList;
3,深入学习
既然发生了这个问题,那就深入了解一下这2个包的差异以及使用注意事项
来源:com.alibaba.fastjson2 和 com.alibaba.fastjson 是阿里巴巴开发的 JSON 处理库的不同版本
背景 :
fastjson(旧版):最早发布的 JSON 解析库,广泛应用于各种 Java 项目中。
fastjson2(新版):完全重构的版本,在性能、功能和兼容性上有显著提升,目标是替代旧版。

结语
在自己创建的新项目里面写一样的代码,就是复现不了上面的情况,版本不同代码也有所差异,难受,只有这个版本才能复现,但是我没时间再搞这个,先记录一笔
xml
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.23</version>
</dependency>