spring-mvc注解(mvc:annotation-driver,JSON,配置详解)

Posted 寰殇丶天使

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-mvc注解(mvc:annotation-driver,JSON,配置详解)相关的知识,希望对你有一定的参考价值。

一.DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 的使用已经过时!

spring 3.1 开始我们应该用

RequestMappingHandlerMapping 来替换 DefaultAnnotationHandlerMapping,

用 RequestMappingHandlerAdapter 来替换 AnnotationMethodHandlerAdapter。

二.annotation-deiver详解

<mvc:annotation-driven /> 会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter 与xceptionHandlerExceptionResolver 三个bean。

还将提供以下支持:

  1. 支持使用 ConversionService 实例对表单参数进行类型转换;
  2. 支持使用 @NumberFormat annotation、@DateTimeFormat;
  3. 注解完成数据类型的格式化;
  4. 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证;
  5. 支持使用 @RequestBody 和 @ResponseBody 注解;
mvc:annotation-driven作用:
  1. 当使用mvc:view-controller标签时一定要加入mvc:annotation-driven,不然会使requestMapping失效。
  2. 当为了处理静态资源问题而加入mvc:default-servlet-handler时,也一定要加入mvc:annotation-driven,不然requestMapping同样会失效。
  3. 当使用自定义类型转换器的时候需要加上mvc:annotation-driven标签。

三.手动配置驱动和JSON,不使用驱动注解MVC:annotation-deiver

手动配置,不使用<mvc:annotation-driven />

设计:手工指定RequestMappingHandlerMapping和RequestMappingHandlerAdapter,并给RequestMappingHandlerAdapter的messageConverters的注入属性值.不使用驱动注解(<mvc:annotation-driven />)自动配置的原因是:自动配置我没找到方法来修改response的Content-Type, 而自动配置默认的content-type是application/json;charset=UTF-8.这个contentType在谷歌浏览器很正常解析,而到了IE解析为弹出下载了,IE10,IE11一样不给面子!!!如果将contentType改为:text/html;charset=UTF-8.那IE和google浏览器都能正常解析了.


不用再去写<mvc:annotation-driven />,至于<mvc:annotation-driven />在背后做了什么,可看参考手册.注意spring版本哦,这两类从3.1才开始有的.

基于xml配置:

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />  
  2. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
  3.     <property name="messageConverters">  
  4.         <list>  
  5.             <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
  6.                 <property name="supportedMediaTypes">  
  7.                     <list>  
  8.                         <value>text/html;charset=UTF-8</value>  
  9.                         <value>application/json;charset=UTF-8</value>  
  10.                     </list>  
  11.                 </property>  
  12.             </bean>  
  13.         </list>  
  14.     </property>  
  15. </bean>  

基于Java-config方式会更加简单一点,先让你的mvc配置继承WebMvcConfigurerAdapter,再重写configureMessageConverters方法,加入jackson包,在controller使用@ResponseBody注解,OK!

 

如果要全局支持jsonp(支持jsonp的做法:可以在controller的方法返回String类型,接收一下callback,然后callback调用一下json结果就可以),可以再加一个StringHttpMessageConverter,不仅能解决中文乱码,还能把json里面的换行\\r\\n去掉.

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />  
  2. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
  3.     <property name="messageConverters">  
  4.         <list>  
  5.             <bean class="org.springframework.http.converter.StringHttpMessageConverter">  
  6.                 <property name="supportedMediaTypes">  
  7.                     <list>  
  8.                         <value>text/html; charset=UTF-8</value>  
  9.                         <value>application/json;charset=UTF-8</value>  
  10.                     </list>  
  11.                 </property>  
  12.             </bean>  
  13.             <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
  14.                 <property name="supportedMediaTypes">  
  15.                     <list>  
  16.                         <value>text/html; charset=UTF-8</value>  
  17.                         <value>application/json;charset=UTF-8</value>  
  18.                     </list>  
  19.                 </property>  
  20.             </bean>  
  21.         </list>  
  22.     </property>  
  23. </bean>  

 

 

 
 

以上是关于spring-mvc注解(mvc:annotation-driver,JSON,配置详解)的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC的全注解开发

Spring 之 注解实现返回json

org.apache.catalina.core.ApplicationContext.log Initializing Spring DispatcherServlet ‘spring-mvc‘(代

如何在 Spring-mvc 中使用 Session 属性

spring-mvc 的一些使用技巧(转)

实现第一个简单的spring-mvc的程序