項目開發中遇到過幾次這個問題,所以記錄一下,代碼如下:
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 }
1 public void addFileRecord(List<AddFileRecordRequestDto> requestDtos, 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啟動參數
View Code1 fastjson.parser.autoTypeAccept= 類// 如果有多個包名前綴,用逗號隔開
- 在代碼中添加配置(我使用的這種)
View Code1 ParserConfig.getGlobalInstance().addAccept("類"); // 如果有多個包名前綴,用逗號隔開
