目前项目开发流行的方式是视图向服务端发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 = " ";
//处理返回的数据,年级列表是数组
for (var i = 0; i < data.grades.length; i++) {
str += data.grades[i].gradeName + " ";
}
//还有一个消息数据
$(".h").html(str + " " + 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>