日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

探索RequestBody报com.alibaba.fastjson.JSONObject cannot be cast to xxx

發布時間:2025/3/20 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 探索RequestBody报com.alibaba.fastjson.JSONObject cannot be cast to xxx 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  今天使用RequestBody接受前端傳過來的參數,以前接受字符串數組非常成功,這次把形參改成了List<User>,原本以為順利接受參數并映射成User的list結構,結果竟然在我取user.getId()時報了com.alibaba.fastjson.JSONObject cannot be cast to xxx的錯。

前端:

1 $.ajax({ 2 url : "/insertUser", 3 async : true, 4 cache : false, 5 type : "post", 6 contentType : "application/json; charset=UTF-8", 7 data : JSON.stringify(userList), 8 success : function(data) { 9 //... 10 } 11 });

后端:

1 @RequestMapping("/insertUser") 2 public void insertBlank(@RequestBody List<User> userList) { 3 User user = userList.get(0); 4 System.out.println(user.getId()); 5 }

  不知怎的,RequestBody接受參數不能直接轉成想要的類,通過debug觀察到userList接受到了一個JSONArray<JSONObject>的結構,根本沒有轉成List<User>.

  搜索資料,發現要想用RequestBody直接映射到java對象,需要配置在配置springMVC注解驅動時配置fastJson轉換器,看了看項目中的配置文件,這的配了這個東西。

1 <mvc:annotation-driven> 2 <mvc:message-converters register-defaults="true"> 3 <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> 4 <property name="supportedMediaTypes"> 5 <list> 6 <value>application/json;charset=UTF-8</value> 7 </list> 8 </property> 9 </bean> 10 </mvc:message-converters> 11 </mvc:annotation-driven>

  但是與資料不同,正在開發的項目還對這個轉換器設置了支持觸發的類型application/json;charset=UTF-8。

  觀察一下

  發送的請求為application/json; charset=UTF-8,

  支持的類型為application/json;charset=UTF-8

  發現端倪了,我發的請求類型中間多了一個空格!

  去掉空格發送請求,結果:

  我的user對象還是沒有轉換成功,還是一個一個JSONObject,但是請觀察,JSONArray轉換成了ArrayList。

  嗯,配置的映射轉換器生效了,結果表明,RequestBody能直接將json對象映射成java對象,但僅限于第一層的對象,至于嵌套的對象,則需要開發者自己去轉換。

1 @RequestMapping("/insertUser") 2 public void insertUser(@RequestBody List<JSONObject> list) { 3 List<User> userList = list.stream().map(json -> JSONObject.toJavaObject(json, User.class)).collect(Collectors.toList()); 4 service.insertUser(userList); 5 }

轉載于:https://www.cnblogs.com/guanghe/p/10599952.html

總結

以上是生活随笔為你收集整理的探索RequestBody报com.alibaba.fastjson.JSONObject cannot be cast to xxx的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。