SpringMVC3 AnnotationMethodHandlerAdapter与mvc:annotation-driven冲突的解决方案

1、问题

在使用SpringMVC3时,需要对response到页面的数据进行编码设置则需要自定义注解数据格式化类来对页面传过来的字符串进行格式化。

编码设置:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
        <property name="messageConverters">
             <list>
                 <bean class = "org.springframework.http.converter.StringHttpMessageConverter">
                    <property name = "supportedMediaTypes">
                         <list>
                             <value>text/plain;charset=UTF-8</value>
                         </list>
                    </property>
                 </bean>
             </list>
        </property>
    </bean> 

Formatter设置:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	  <property name="formatters">
	      <list>
	          <bean class="com.grgbanking.it.common.formatter.TimestampFormatAnnotationFormatterFactory"/>
	      </list>
	  </property>
	</bean>
	<mvc:annotation-driven conversion-service="conversionService"/>

当两者按上面的设置好后,StringHttpMessageConverter不起作用了。

2、原因

<mvc:annotation-driven />的配置如下:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
		<property name="order" value="1" />
	</bean>
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="webBindingInitializer">
		  <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
		   <property name="conversionService" ref="conversionService" />
		   <property name="validator" ref="validator" />
		  </bean>
		</property>
	</bean>
	<bean id="conversionService" class="org.springframework.samples.petclinic.util.PetclinicConversionServiceFactory" />
	<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 

从上面的配置信息来看,<mvc:annotation-driven />相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean。

所以我们在上面配置的AnnotationMethodHandlerAdapter在<mvc:annotation-driven />后是不起作用的。<mvc:annotation-driven
/>包括了一个默认的AnnotationMethodHandlerAdapter功能。

3、解决

把StringHttpMessageConverter配置在<mvc:annotation-driven
/>里面。

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	  <property name="formatters">
	      <list>
	          <bean class="com.grgbanking.it.common.formatter.TimestampFormatAnnotationFormatterFactory"/>
	      </list>
	  </property>
	</bean> 

	<!-- 设置转换器 -->
	<mvc:annotation-driven conversion-service="conversionService">
		<mvc:message-converters>
        	 <bean class = "org.springframework.http.converter.StringHttpMessageConverter">
                    <property name = "supportedMediaTypes">
                         <list>
                             <value>text/plain;charset=UTF-8</value>
                         </list>
                    </property>
                 </bean>
        </mvc:message-converters>
	</mvc:annotation-driven>

注:上面方法只适用于SpringMVC
3.1.x以上版本。

时间: 2024-09-30 20:40:05

SpringMVC3 AnnotationMethodHandlerAdapter与mvc:annotation-driven冲突的解决方案的相关文章

Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested excepti

Interceptor 与 &lt;mvc:annotation-driven /&gt; 的冲突

第一次写,希望大神们呵呵即可. 最近在学习拦截器,没想到刚开始就碰到难题了.我明明配置好了拦截器,但是丝毫没有起作用,百思不得其解. 这是起初的配置: <context:component-scan base-package="sin.cara.controller" />           <mvc:annotation-driven />        <bean         class="org.springframework.web

Spring MVC annotation configuration

1. Web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns

Spring MVC遭遇checkbox的问题解决方案

Spring MVC遭遇checkbox的问题是:当checkbox全不选时候,则该checkbox域的变量为null,不能动态绑定到spring的controller方法的入参上,并抛出异常. 解决方案: 1.javascript方式提交,提交前拼提交参数串,拼完后通过ajax方式提交.可以使用controller请求参数绑定. 缺点:逐个提取表单参数,并对checkbox选项参数进行判断拼装(字符分割),最终提交到后台太麻烦. 2.添加checkbox的同名隐藏域,从而使提交过去数据永不为n

关于eclipse复制当前行快捷键与笔记本屏幕旋转快捷键冲突的解决方案

eclipse中复制当前行快捷键是Ctrl+Alt+↑或者Ctrl+Alt+↓但是在某些笔记本上使用此快捷键效果却是屏幕上下旋转有一种可能是你的笔记本上安装了intel的显卡芯片驱动方法一:此驱动有一个控制面板,其中有一个全局快捷键设置,把快捷键修改成其他的或者直接关闭就可以解决冲突.方法二:当然,也可以修改eclipse的快捷键.方法一步骤如下: 关于eclipse复制当前行快捷键与笔记本屏幕旋转快捷键冲突的解决方案,布布扣,bubuko.com

php中并发读写文件冲突的解决方案(文件锁应用示例)

PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域.PHP的文件后缀名为php. 本文为大家讲解的是php中并发读写文件冲突的解决方案(文件锁应用示例),感兴趣的同学参考下. 在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这

[Spring MVC] - Annotation验证

使用Spring MVC的Annotation验证可以直接对view model的简单数据验证,注意,这里是简单的,如果model的数据验证需要有一些比较复杂的业务逻辑性在里头,只是使用annotation做验证是比较难的. 以下是使用Spring MVC自带的annotation验证,加上自定义的一个@Tel的annotation验证例子,此例子具有: 1.支持多语言(国际化) 2.对默认数据先进行转化,比如int.date类型如果传入空值时,会抛异常,默认给定值 先看配置: 1.web.xm

DWZ和ASP.NET MVC等框架的冲突问题解决方案

最近的一个项目用到了dwz和mvc的整合开发,但是dwz中的lookup查找带回功能对name标签进行了绑架,导致向后台传值不好处理,现在为标签 单独设置一个属性bringbackname来进行带回的关联 dwz.min.js 一.2714行,将带回到的属性进行更改,原先带回到name属性,现改为 var $input=$(this),inputName=$input.attr("bringbackname"); 二.2861行,为th新增属性 bringbackname: $th.a

MVC:控制器名与被调用模型名称发生冲突的解决方案

控制器名与被调用的模型名发生了冲突: 有两种解决方案: (1)将被调用的模型类名进行修改 例如: (2)对被调用的模型进行起一个别名 以上 加油ヾ(?°?°?)?? 原文地址:https://www.cnblogs.com/finalanddistance/p/10179073.html