Spring Mvc 3.1 之后如何配置messageConverters

来源:互联网 发布:java配置文件格式 编辑:程序博客网 时间:2024/06/01 07:42

<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。

这句话我在很多帖子都看到过,我自己的项目本身使用的Spring MVC 3.2,实际上在3.1之后,<mvc:annotation-driven />注册的类发生了变化

Spring Framework 3.1 introduces a new set of support classes for processing requests with annotated controllers:

  • RequestMappingHandlerMapping

  • RequestMappingHandlerAdapter

  • ExceptionHandlerExceptionResolver

These classes are a replacement for the existing:

  • DefaultAnnotationHandlerMapping

  • AnnotationMethodHandlerAdapter

  • AnnotationMethodHandlerExceptionResolver

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans  
  7.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.         http://www.springframework.org/schema/mvc  
  9.         http://www.springframework.org/schema/mvc/spring-mvc.xsd">  
  10.   
  11.     <mvc:annotation-driven />  
  12.   
  13. </beans>  



The above registers a RequestMappingHandlerMapping, a RequestMappingHandlerAdapter, and an ExceptionHandlerExceptionResolver (among others) in support of processing requests with annotated controller methods using annotations such as @RequestMapping @ExceptionHandler, and others.

It also enables the following:

  1. Spring 3 style type conversion through a ConversionService instance in addition to the JavaBeans PropertyEditors used for Data Binding.

  2. Support for formatting Number fields using the @NumberFormat annotation through the ConversionService.

  3. Support for formatting Date, Calendar, Long, and Joda Time fields using the @DateTimeFormat annotation.

  4. Support for validating @Controller inputs with @Valid, if a JSR-303 Provider is present on the classpath.

  5. HttpMessageConverter support for @RequestBody method parameters and @ResponseBody method return values from @RequestMapping or @ExceptionHandler methods.

    This is the complete list of HttpMessageConverters set up by mvc:annotation-driven:

    • ByteArrayHttpMessageConverter converts byte arrays.

    • StringHttpMessageConverter converts strings.

    • ResourceHttpMessageConverter converts to/from org.springframework.core.io.Resource for all media types.

    • SourceHttpMessageConverter converts to/from a javax.xml.transform.Source.

    • FormHttpMessageConverter converts form data to/from a MultiValueMap<String, String>.

    • Jaxb2RootElementHttpMessageConverter converts Java objects to/from XML — added if JAXB2 is present on the classpath.

    • MappingJackson2HttpMessageConverter (or MappingJacksonHttpMessageConverter) converts to/from JSON — added if Jackson 2 (or Jackson) is present on the classpath.

    • AtomFeedHttpMessageConverter converts Atom feeds — added if Rome is present on the classpath.

    • RssChannelHttpMessageConverter converts RSS feeds — added if Rome is present on the classpath.

这是摘取的官方文档,可以看出,注册的类已经变成了RequestMappingHandlerMapping和 RequestMappingHandlerAdapter。

我之前在不知道的时候,使用AnnotationMethodHandlerAdapter 进行配置,结果在有<mvc:annotation-driven />存在的情况下,我自己配置的AnnotationMethodHandlerAdapter 怎么都不起作用,于是去掉了<mvc:annotation-driven />标签,手动注册了AnnotationMethodHandlerAdapter ,和DefaultAnnotationHandlerMapping。结果引发了其他问题,比如文件无法上传的问题。


阅读文档发现Spring提供了基于<mvc:annotation-driven />自定义messageConverters的方法,如下所示:

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <mvc:annotation-driven conversion-service="conversionService">  
  2.     <mvc:message-converters>  
  3.         <bean class="org.example.MyHttpMessageConverter"/>  
  4.         <bean class="org.example.MyOtherHttpMessageConverter"/>  
  5.     </mvc:message-converters>  
  6. </mvc:annotation-driven>  

下面展示我自己的配置

[html] view plain copy
 print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xmlns:util="http://www.springframework.org/schema/util"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.                      http://www.springframework.org/schema/beans/spring-beans.xsd  
  9.                      http://www.springframework.org/schema/tx  
  10.                      http://www.springframework.org/schema/tx/spring-tx.xsd  
  11.                      http://www.springframework.org/schema/context   
  12.                      http://www.springframework.org/schema/context/spring-context.xsd  
  13.                      http://www.springframework.org/schema/aop  
  14.                      http://www.springframework.org/schema/aop/spring-aop.xsd  
  15.                      http://www.springframework.org/schema/jdbc  
  16.                      http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd  
  17.                      http://www.springframework.org/schema/util        
  18.                      http://www.springframework.org/schema/util/spring-util-3.2.xsd  
  19.                      http://www.springframework.org/schema/mvc   
  20.                      http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">  
  21.   
  22.     <!-- spring自动扫描注解的组件 -->  
  23.     <context:component-scan base-package="cn.xx.xx"  
  24.         use-default-filters="false">  
  25.         <context:include-filter expression="org.springframework.stereotype.Controller"  
  26.             type="annotation" />  
  27.     </context:component-scan>  
  28.   
  29.     <mvc:annotation-driven>  
  30.         <mvc:message-converters>  
  31.             <ref bean="stringHttpMessageConverter" />  
  32.             <ref bean="fastJsonHttpMessageConverter" />  
  33.             <ref bean="marshallingHttpMessageConverter" />  
  34.         </mvc:message-converters>  
  35.     </mvc:annotation-driven>  
  36.   
  37.     <bean id="stringHttpMessageConverter"  
  38.         class="org.springframework.http.converter.StringHttpMessageConverter">  
  39.         <constructor-arg value="UTF-8" index="0"></constructor-arg><!--  
  40.             避免出现乱码 -->  
  41.         <property name="supportedMediaTypes">  
  42.             <list>  
  43.                 <value>text/plain;charset=UTF-8</value>  
  44.             </list>  
  45.         </property>  
  46.     </bean>  
  47.     <bean id="fastJsonHttpMessageConverter"  
  48.         class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">  
  49.   
  50.         <property name="supportedMediaTypes">  
  51.             <list>  
  52.                 <value>application/json;charset=UTF-8</value>  
  53.                 <value>text/html;charset=UTF-8</value><!-- 避免IE出现下载JSON文件的情况 -->  
  54.             </list>  
  55.         </property>  
  56.         <property name="features">  
  57.             <util:list>  
  58.                 <!-- <value>WriteMapNullValue</value> -->  
  59.                 <value>QuoteFieldNames</value>  
  60.                 <value>WriteDateUseDateFormat</value>  
  61.             </util:list>  
  62.         </property>  
  63.     </bean>  
  64.       
  65.     <bean id="marshallingHttpMessageConverter"  
  66.         class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">  
  67.         <property name="marshaller" ref="castorMarshaller" />  
  68.         <property name="unmarshaller" ref="castorMarshaller" />  
  69.         <property name="supportedMediaTypes">  
  70.             <list>  
  71.                 <value>text/xml;charset=UTF-8</value>  
  72.                 <value>application/xml;charset=UTF-8</value>  
  73.             </list>  
  74.         </property>  
  75.     </bean>  
  76.   
  77.     <!-- 返回类型定义 -->  
  78.     <util:list id="messageConverters">  
  79.         <ref bean="stringHttpMessageConverter" />  
  80.         <ref bean="fastJsonHttpMessageConverter" />  
  81.         <ref bean="marshallingHttpMessageConverter" />  
  82.     </util:list>  
  83.   
  84.     <bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller" />  
  85.   
  86.     <!-- AOP自动注解功能 -->  
  87.     <aop:aspectj-autoproxy />  
  88.   
  89.     <!-- 不进行拦截的 -->  
  90.     <mvc:resources location="/" mapping="/**/*.html" order="0" />  
  91.     <mvc:resources location="/images/" mapping="/images/**" />  
  92.     <mvc:resources location="/img/" mapping="/img/**" />  
  93.     <mvc:resources location="/download/" mapping="/download/**" />  
  94.   
  95.     <mvc:resources location="/js/" mapping="/js/**" />  
  96.     <mvc:resources location="/css/" mapping="/css/**" />  
  97.     <mvc:resources location="/plugin/" mapping="/plugin/**" />  
  98.     <mvc:resources location="/WEB-INF/pages/" mapping="/pages/**" />  
  99.   
  100.     <bean id="messageSource"  
  101.         class="org.springframework.context.support.ResourceBundleMessageSource">  
  102.         <property name="basename" value="messages"></property>  
  103.     </bean>  
  104.   
  105.     <bean  
  106.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  107.         <property name="prefix" value="/WEB-INF/pages/" />  
  108.         <property name="suffix" value=".jsp" />  
  109.   
  110.     </bean>  
  111.   
  112.     <!-- 支持上传文件 -->  
  113.     <bean id="multipartResolver"  
  114.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />  
  115.   
  116.     <!-- restTemplate -->  
  117.     <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">  
  118.         <property name="messageConverters" ref="messageConverters">  
  119.         </property>  
  120.     </bean>  
  121. </beans>  
http://blog.csdn.net/yfisaboy/article/details/31755631






0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果7plus掉漆怎么办 皮的手机壳脏了怎么办 小米5x边边裂开怎么办 荣耀8的后盖摔了怎么办 hp打印机卡了纸怎么办 华为荣耀9进水了怎么办 小米5x屏幕脱胶怎么办 小米5x后盖松动怎么办 苹果手机没电了怎么办 荣耀9的后盖裂了怎么办 手机一直在开机画面怎么办华为 华为手机一直显示开机画面怎么办 华为p7手机开不了机怎么办 华为荣耀8弯了怎么办 手机壳掉漆了怎么办 华为5a手机音量小怎么办 华为5a手机声音小怎么办 苹果屏幕磨花了怎么办 白色磨砂手机壳脏了怎么办 胶皮手机壳变黄怎么办 手机壳边缘黑了怎么办 手机壳磨黑了怎么办 iphon8原装后壳碎裂怎么办 皮的手机壳发黄怎么办 荣耀手机一直在开机画面怎么办 玻璃手机壳碎了怎么办 华为6x信号不好怎么办 昂达平板v819i刷成砖了怎么办 华为5x忘记密码怎么办 荣耀8开不了机怎么办 华为5s死机了怎么办 华为重启后忘了解锁密码怎么办 华为mate.9上网速度慢怎么办 华为mate10上网速度慢怎么办 四核豌豆2变砖怎么办 苹果32g不够用怎么办 移动4g网络卡怎么办 移动4g网非常卡怎么办 移动4g卡网速慢怎么办 手机移动4g网卡怎么办 华为手机摄像头进灰怎么办