JAVA程序员

SpringMVC处理Ajax请求

2017-08-21  本文已影响48人  刺風
一、修改pom文件或引入相关jar包

Spring使用了jackson类库,帮助我们在java对象和json、xml数据之间的互相转换。他可以将控制器返回的对象直接转换成json数据,供客户端使用。客户端也可以传送json数据到服务器进行直接转换。

  1. 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>  
    
  2. 非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,我会将之前和之后的配置都贴出来,供选择使用。

  1. 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>
    
  2. 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采用了适配器模式对数据进行转换。

上一篇 下一篇

猜你喜欢

热点阅读