Spring MVC之返回JSON数据

我们在本示例中,使用Spring3.0 MVC, Spring 3.0 MVC已经支持JSON了。

这里我们使用基于注解的方式,也是springMVC 3.0所支持的RESTFul风格的。

 1.Spring MVC处理json数据时,所必须的jackson依赖,这里以maven构建为例:

  1. <dependency>  
  2.     <groupId>org.codehaus.jackson</groupId>  
  3.     <artifactId>jackson-core-asl</artifactId>  
  4.     <version>1.8.4</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.codehaus.jackson</groupId>  
  8.     <artifactId>jackson-mapper-asl</artifactId>  
  9.     <version>1.8.4</version>  
  10. </dependency>  

 

2.在spring mvc的配置文件中加入配置 

  1. <context:component-scan base-package="com.hundsun.twioo.business.action" />  
  2. <bean class="org.springframework.web.servlet.mvc.annotation.  
  3.     DefaultAnnotationHandlerMapping" />  
  4. <bean class="org.springframework.web.servlet.mvc.annotation.  
  5.     AnnotationMethodHandlerAdapter" >  
  6.     <property name="messageConverters">  
  7.         <util:list id="beanList">  
  8.             <ref bean="mappingJacksonHttpMessageConverter"/>  
  9.         </util:list>  
  10.     </property>  
  11. </bean>  
  12. <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.  
  13.     http.converter.json.MappingJacksonHttpMessageConverter">  
  14.     <property name="supportedMediaTypes">  
  15.         <list>  
  16.             <value>text/html;charset=UTF-8</value>  
  17.         </list>  
  18.     </property>  
  19. </bean>  
  20. <context:annotation-config/>  

 

注意:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter的Bean配置中,我们加入了messageConverters属性,在该属性中我们有配置mappingJacksonHttpMessageConverter这个Bean,它就是用来处理json数据转换的。

在mappingJacksonHttpMessageConverter的Bean配置中,我们有一个supportedMediaTypes属性,在这个属性

中我们添加了text/html;charset=UTF-8这个值,它是为了处理返回的json数据的编码,默认是ISO-88859-1的,这里我们把它设置为UTF-8,如果有乱码的情况,我们只需要修改这里就可以了。

 

3.控制器Controller上的注解使用

  1. @Controller  
  2. @RequestMapping("/logins")  
  3. public class LoginController {  
  4.   
  5.     @Autowired  
  6.     private LoginManagerService loginManagerService;  
  7.     @Autowired  
  8.     private PermitManagerService permitManagerService;  
  9.     private Logger log = Logger.getLogger(LoginController.class);  
  10.       
  11.       
  12.     /** 
  13.      * 用户登录系统 
  14.      * @return 
  15.      */  
  16.     @RequestMapping(value="/login")  
  17.     public ModelAndView login(HttpServletRequest request,HttpSession session){  
  18.           
  19.         User user = null;  
  20.         List<Module> moduleList = null;  
  21.         try {  
  22.             //TwiooID  
  23.             Integer twiooId = ServletRequestUtils.getIntParameter(request, "twiooId");   
  24.             //群ID  
  25.             Integer groupId = ServletRequestUtils.getIntParameter(request, "groupId");   
  26.             user = loginManagerService.login(twiooId, 3);  
  27.             if(null != user){  
  28.                 moduleList = permitManagerService.findPermit(user.getId());  
  29.             }  
  30.             session.setAttribute("user", user);  
  31.             session.setAttribute("permit", moduleList);  
  32.             session.setAttribute("twiooId", twiooId);  
  33.             session.setAttribute("groupId", groupId);  
  34.         } catch (Exception e) {  
  35.             e.printStackTrace();  
  36.             log.error("LoginController.login() execute error!!!");  
  37.         }  
  38.         System.out.println("login...................");  
  39.         return new ModelAndView("index");  
  40.     }  
  41.       
  42.       
  43.     /** 
  44.      * 用户退出系统 
  45.      * @return 
  46.      */  
  47.     @RequestMapping(value="/exit")  
  48.     public ModelAndView exit(HttpServletRequest request,HttpSession session){  
  49.           
  50.         session.removeAttribute("user");  
  51.         session.removeAttribute("permit");  
  52.         session.removeAttribute("twiooId");  
  53.         session.removeAttribute("twiooId");  
  54.         System.out.println("exit....................");  
  55.         return new ModelAndView("index");  
  56.     }  
  57.       
  58.       
  59.     /** 
  60.      * 测试返回JSON数据 
  61.      * @param session 
  62.      * @return 
  63.      */  
  64.     @RequestMapping(value="/test")  
  65.     @ResponseBody  
  66.     public Object test(HttpSession session){  
  67.           
  68.         System.out.println("test....................");  
  69.         return session.getAttribute("permit");  
  70.     }  
  71.       
  72.       
  73.   
  74.     public LoginManagerService getLoginManagerService() {  
  75.         return loginManagerService;  
  76.     }  
  77.     public void setLoginManagerService(LoginManagerService loginManagerService) {  
  78.         this.loginManagerService = loginManagerService;  
  79.     }  
  80.     public PermitManagerService getPermitManagerService() {  
  81.         return permitManagerService;  
  82.     }  
  83.     public void setPermitManagerService(PermitManagerService permitManagerService) {  
  84.         this.permitManagerService = permitManagerService;  
  85.     }  
  86. }  

注意:test()方法上,我们使用了一个@ResponseBody的注解,Spring3.0 MVC @ResponseBody的作用是把返回值直接写到HTTP response body里。 test()这个方法就是我们这里关注的地方,它就是返回json数据到客户端去的。还要注意,这个test()方法返回的是Object(这里可以是任意类型),而不ModelAndView。 

你可能感兴趣的:(springMVC,学习笔记)