探索RequestBody报com.alibaba.fastjson.JSONObject。。。
今天使⽤RequestBody接受前端传过来的参数,以前接受字符串数组⾮常成功,这次把形参改成了List<User>,原本以为顺利接受参数并映射成User的list结构,结果竟然在我取Id()时报了com.alibaba.fastjson.JSONObject cannot be cast to xxx的错。
前端:
1$.ajax({
2 url : "/insertUser",
3 async : true,fastjson字符串转数组
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")
2public void insertBlank(@RequestBody List<User> userList) {
3 User user = (0);
4 System.out.Id());
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")
2public void insertUser(@RequestBody List<JSONObject> list) {
3 List<User> userList = list.stream().map(json -> JavaObject(json, User.class)).List());
4 service.insertUser(userList);
5 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论