项目开发中遇到过几次这个问题,所以记录一下,代码如下:
1 @PostMapping("/save-files")2 public void addFiles(@RequestBody ListfileRecords)3 {4 LoginInfo loginInfo=sessionUtils.getLoginInfo();5 Assert.notNull(loginInfo,"登录信息已过期");6 Assert.isTrue(!CollectionUtils.isEmpty(fileRecords),"数据不能为空");7 fileRecordService.addFileRecord(fileRecords,loginInfo);8 }
1 public void addFileRecord(ListrequestDtos, LoginInfo loginInfo) {2 3 }
然后在进入Service的时候就抛出了以下异常:
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("类"); // 如果有多个包名前缀,用逗号隔开