博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC 4.x + fastjson 1.2.7,封装的List<?>参数
阅读量:6424 次
发布时间:2019-06-23

本文共 2423 字,大约阅读时间需要 8 分钟。

hot3.png

使用spring mvc,Controller参数传参时,参数为一个对象的,在执行请求的时候,可以传递json数据,然后spring会自动解析json数据,并封装到这个对象中。

比如下面这段代码:

@RequestMapping(value = "json2Bean", consumes = "application/json", method = RequestMethod.POST)public CoreRole json2Bean(@RequestBody CoreRole role) {	logger.info("【json2List测试】role = {}", role.toString());	return role;}

 

请求代码:

$(function(){	var data = {"code":"2","roleName":"大哥"}	$.ajax({		url:'/coreRole/json2Bean.do',		data:JSON.stringify(data),		type:'POST',		dataType:'json',		contentType: "application/json;charset=UTF-8",		success:function(data){			alert(JSON.stringify(data));		},		error:function(){			alert('error');		}	});})

 

但是有时候,我们需要的数据是一个对象的集合,比如批量添加数据,我们的参数可能是List<?>。

 

查阅过一些资料,说spring mvc不支持将一个json数据直接封装成List对象集合。

可是现在项目中就有这样的需求,所以我抽时间做了测试,经测试,使用@RequestBody是可以做到这一步的。

PS:项目中使用fastjson 1.2.7版本,在spring mvc的配置文件中配置了一个convert。

好了,废话不多说,上代码

fastjson依赖:

com.alibaba
fastjson
1.2.7

 

spring mvc的配置文件:

text/html;charset=UTF-8
text/json;charset=UTF-8
application/json;charset=UTF-8
QuoteFieldNames

 

Controller代码:

@RequestMapping(value = "json2List", consumes = "application/json", method = RequestMethod.POST)public List
json2List(@RequestBody List
roles) { logger.info("【json2List测试】role = {}", roles.toString()); return roles;}

ajax代码:

$(function(){	var dataAry=[];  	var data2 = {"code":"1","roleName":"大哥"}	var data1 = {"code":"2","roleName":"二哥"}	dataAry.push(data1);	dataAry.push(data2);	$.ajax({		url:'/coreRole/json2List.do',		data:JSON.stringify(dataAry),		type:'POST',		dataType:'json',		contentType: "application/json;charset=UTF-8",		success:function(data){			alert(JSON.stringify(data));		},		error:function(){			alert('error');		}	});})

测试结果:

【json2List测试】role = [{"code":"2","roleName":"二哥"}, {"code":"1","roleName":"大哥"}]

(2016年5月13日14:16:46添加)高能预警

    虽然测试结果看到似乎是正确的,但是,当我们使用这个List的时候(比如循环),会抛出异常,说这个List对象的元素是一个JSONObject对象,不能转换成目标对象。当时就纳闷了,这完全就是一个BUG。

    那么,既然这个List的元素是JSONObject,那这个List对象就是一个JSONArray对象,toString()之后就是一个JSONArray的字符串,解决方案冒出水面了,我们再使用fastjson的json字符串转对象,不是就搞定了么?返回参数就是我们希望得到的List对象了

JSON.parseArray(text, clazz)

转载于:https://my.oschina.net/simpleton/blog/668109

你可能感兴趣的文章
项目总结:凡事预则立,不预则废!
查看>>
ORA-32004: obsolete and/or deprecated parameter(s)
查看>>
建属于自己的网站
查看>>
[linux] ubuntu 切换默认的/bin/sh
查看>>
Web Bench (网站压力测试工具)
查看>>
boost库之智能指针
查看>>
linux c/c++ GDB教程详解(转载)
查看>>
centos7下安装Python的pip
查看>>
华为HCIE 面试战报
查看>>
C++ 一些知名的库
查看>>
用busybox创建一个不足50M的Linux
查看>>
在redhat server 6 安装gcc-4.5.2
查看>>
我的友情链接
查看>>
自定义View Client 登录方式(一)
查看>>
rsync搭建使用
查看>>
一台服务器上同时运行多个MySQL
查看>>
cenOS+nginx+php+mysql (非一键包安装)
查看>>
优秀程序员不一定是优秀的软件设计师
查看>>
JS系列
查看>>
在文件夹右键菜单中添加“进入DOS”命令的方法
查看>>