Spring MVC 返回 Json 数据

目前项目开发流行的方式是视图向服务端发Ajax请求,服务端返回Json格式的数据,在Spring MVC的控制器把从持久化层返回的数据封装成Json格式的数据,再返回给视图,同时,也需要注意数据中有中文乱码的问题。

一、服务端数据处理:

//服务端注册的URL
@RequestMapping("json")
@ResponseBody  //表示返回的是Json数据,而不是视图名称
public String json() {
	//因为是ajax请求,需要所数据转换成JSON格式。
	List<Grade> grades = gradeService.find();
	//针对对象的处理
	JSONArray array = JSONArray.fromObject(grades);		
	JSONObject obj = new JSONObject();
	//对象封装
	obj.put("grades", array);
	//字符串的封装
	obj.put("msg", "年级信息列表");		
	return obj.toString();
}

注意,封装成Json格式需要导入相关的Jar包,如下:

commons-beanutils-1.8.0.jar
commons-collections-3.1.jar
commons-lang-2.5.jar
commons-logging-1.1.3.jar
ezmorph-1.0.6.jar
json-lib-2.3-jdk15.jar

二、在视图页面上的处理代码:

<script type="text/javascript" src="/SSMDemo0307/js/jquery-1.8.3.js"></script>
<script type="text/javascript">
	function buttonClick() { 
		$.getJSON("grade/json", function(data) { 
			var str = "&nbsp;&nbsp;";
			//处理返回的数据,年级列表是数组
			for (var i = 0; i < data.grades.length; i++) {
				str += data.grades[i].gradeName + "&nbsp;&nbsp;";
			}
			//还有一个消息数据
			$(".h").html(str + " &nbsp;" + data.msg);
		});
	}
</script>
</head>
<body>
    <h2 class="h"></h2>
	<p>
		<input type="button" onclick="buttonClick()" value="点击">
	</p>
</body>

三、中文乱码的处理方法。

SpringMVC 控制器返回Json格式数据时有中文乱码问题,解决方案常用的有两种。

1. 在控制器的 @RequestMapping注解 中添加produses:但是这样只对这个方法有效

   @RequestMapping(value = { "json" } ,produces = "application/json; charset=utf-8")

2. 在SpringMVC的配置文件中配置,对整个项目有效:强烈推荐

<!-- 注解驱动 -->
<mvc:annotation-driven>
	<!-- 指定http返回编码格式,不然返回ajax请求json会出现中文乱码 -->
	<mvc:message-converters>
		<bean class="org.springframework.http.converter.StringHttpMessageConverter">
			<property name="supportedMediaTypes">
				<list>
					<value>text/html;charset=UTF-8</value>
					<value>application/json;charset=UTF-8</value>
					<value>*/*;charset=UTF-8</value>
				</list>
			</property>
		</bean>
	</mvc:message-converters>
</mvc:annotation-driven>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值