javascript
探索RequestBody报com.alibaba.fastjson.JSONObject cannot be cast to xxx
今天使用RequestBody接受前端傳過來的參數(shù),以前接受字符串數(shù)組非常成功,這次把形參改成了List<User>,原本以為順利接受參數(shù)并映射成User的list結(jié)構(gòu),結(jié)果竟然在我取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接受參數(shù)不能直接轉(zhuǎn)成想要的類,通過debug觀察到userList接受到了一個JSONArray<JSONObject>的結(jié)構(gòu),根本沒有轉(zhuǎn)成List<User>.
搜索資料,發(fā)現(xiàn)要想用RequestBody直接映射到java對象,需要配置在配置springMVC注解驅(qū)動時配置fastJson轉(zhuǎn)換器,看了看項目中的配置文件,這的配了這個東西。
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>但是與資料不同,正在開發(fā)的項目還對這個轉(zhuǎn)換器設置了支持觸發(fā)的類型application/json;charset=UTF-8。
觀察一下
發(fā)送的請求為application/json; charset=UTF-8,
支持的類型為application/json;charset=UTF-8
發(fā)現(xiàn)端倪了,我發(fā)的請求類型中間多了一個空格!
去掉空格發(fā)送請求,結(jié)果:
我的user對象還是沒有轉(zhuǎn)換成功,還是一個一個JSONObject,但是請觀察,JSONArray轉(zhuǎn)換成了ArrayList。
嗯,配置的映射轉(zhuǎn)換器生效了,結(jié)果表明,RequestBody能直接將json對象映射成java對象,但僅限于第一層的對象,至于嵌套的對象,則需要開發(fā)者自己去轉(zhuǎn)換。
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 }轉(zhuǎn)載于:https://www.cnblogs.com/guanghe/p/10599952.html
總結(jié)
以上是生活随笔為你收集整理的探索RequestBody报com.alibaba.fastjson.JSONObject cannot be cast to xxx的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 痴迷物理,无法自拔——3.24
- 下一篇: ------------------字节