SpringMVC处理Ajax请求
2017-08-21 本文已影响48人
刺風
一、修改pom文件或引入相关jar包
Spring使用了jackson类库,帮助我们在java对象和json、xml数据之间的互相转换。他可以将控制器返回的对象直接转换成json数据,供客户端使用。客户端也可以传送json数据到服务器进行直接转换。
-
maven项目修改pom文件:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
-
非maven项目导入jar包:
jackson-core-2.9.0.jar
jackson-databind-2.9.0.jar
jackson-annotations-2.9.0.jar
二、修改springMVC配置文件
在SpringMVC3.1之后对json的解析采用了新的HandlerAdapter,之前一直使用的是AnnotationMethodHandlerAdapter,在此之后推荐使用RequestMappingHandlerAdapter,我会将之前和之后的配置都贴出来,供选择使用。
-
SpringMVC 3.1之前的配置:
<!--是一种简写形式 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean --> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="cacheSeconds" value="0" /> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> </list> </property> </bean>
-
SpringMVC 3.1之后的配置:
<!-- Spring3.1开始的注解 HandlerMapping HandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list> </property> </bean>
三、服务端代码
@RequestMapping ( "/test5" )
public @ResponseBody List<User> test5(@RequestParam("name")String uname) {
System.out.println(uname);
User u1=new User();User u2=new User();
u1.setUsername("李四");
u2.setUsername("张三");
List<User> list=new ArrayList<User>();
list.add(u1);
list.add(u2);
return list;
}
注意: 使用@RequestBody绑定返回(或请求)对象,Spring会帮你进行协议转换,转换成你想要的类型格式。
四、HTML代码
<%@ page language="java" contentType="text/html;
charset=utf-8" pageEncoding="utf-8"%>
<!-- 引入公共组件,看成引用了Jquery即可 -->
<%@ include file="/common/tag.jsp"%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>测试ajax请求页面</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<input type="text" name="uname" id="uname">
<input type="button" value="点击" onclick="saveFn()">
<div id="div1"></div>
</body>
</html>
<script type="text/javascript">
function saveFn(){
$.ajax({
url:"${ctx}/roles/test5",
dataType:"json",
data:{name:$("#uname").val()},
success:function(result){
$("#div1").html(result[0].username);
}
});
}
</script>
五、结束语
好了,通过上面的操作,您已经实现了ajax的请求处理了吧,你会发现SpringMVC对ajax请求的处理真的是异常的简单,当然了如果觉得jar包中提供的转换器用着不爽,还可以自己去写一个对应的适配器的类(实现HttpMessageConverter接口),然后放到messageConverters里即可,观察源码的话你会发现messageConverters采用了适配器模式对数据进行转换。