项目开发中遇到过几次这个问题,所以记录一下,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/7e12e499147d3f129de8e0d83b29f9a1.gif)
![](https://img-blog.csdnimg.cn/img_convert/0aa17d644dc184ea55e6e08f0d30a9d2.gif)
1 @PostMapping("/save-files")
2 public void addFiles(@RequestBody List<AddFileRecordRequestDto> fileRecords)
3 {
4 LoginInfo loginInfo=sessionUtils.getLoginInfo();
5 Assert.notNull(loginInfo,"登录信息已过期");
6 Assert.isTrue(!CollectionUtils.isEmpty(fileRecords),"数据不能为空");
7 fileRecordService.addFileRecord(fileRecords,loginInfo);
8 }
![](https://img-blog.csdnimg.cn/img_convert/938b10e8391bc5986e68aa9ed58ca5cf.gif)
![](https://img-blog.csdnimg.cn/img_convert/5de3234f104ea5954dc5c637cacefc08.gif)
1 public void addFileRecord(List<AddFileRecordRequestDto> requestDtos, LoginInfo loginInfo) {
2
3 }
然后在进入Service的时候就抛出了以下异常:
![](https://img-blog.csdnimg.cn/img_convert/0615cef35035d47284c3e9307a09725f.gif)
![](https://img-blog.csdnimg.cn/img_convert/207e33b1c5beebc23c970b8949d896b5.gif)
1 java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to XXXXXXXX
解决方法,更换fastJson版本,我之前用的是1.1.27,更改为1.2.49后,不再提示类型转换错误,这时候又报了另外一个错:autoType is not support,通过查询可以看到:安全升级包禁用了部分autotype的功能,也就是"@type"这种指定类型的功能会被限制在一定范围内使用。如果你使用场景中包括了这个功能,https://github.com/alibaba/fastjson/wiki/enable_autotype 这里有一个介绍如何添加白名单或者打开autotype功能。
两种解决方式:
- 加上JVM启动参数
1 fastjson.parser.autoTypeAccept= 类// 如果有多个包名前缀,用逗号隔开
- 在代码中添加配置(我使用的这种)
1 ParserConfig.getGlobalInstance().addAccept("类"); // 如果有多个包名前缀,用逗号隔开