项目开发中遇到过几次这个问题,所以记录一下,代码如下:
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 }
Controller
1 public void addFileRecord(List<AddFileRecordRequestDto> requestDtos, LoginInfo loginInfo) { 2 3 }
Service
然后在进入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("类"); // 如果有多个包名前缀,用逗号隔开
原文地址:https://www.cnblogs.com/rolayblog/p/11095476.html
时间: 2024-11-05 19:03:20