`

spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializer失效解决方案

阅读更多

问题:

spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializer失效:

 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="webBindingInitializer">
			<bean class="com.xxx.ark.core.web.CustomerBindingInitializer" />
		</property>
		<property name="messageConverters">
		  <list>
		    <ref bean="jacksonMessageConverter"/>
		  </list>
		</property>
	</bean>
	
	<mvc:annotation-driven >
    	<mvc:argument-resolvers>
    		<bean class="com.xxx.ark.core.web.FormBeanArgumentResolver" /> 
    	</mvc:argument-resolvers>
    </mvc:annotation-driven>

 

 原因:

annotation-driven缺省注册类的改变 

Spring 3.0.x中使用了annotation-driven后,缺省使用DefaultAnnotationHandlerMapping 来注册handler method和request的mapping关系。 AnnotationMethodHandlerAdapter来在实际调用handlermethod前对其参数进行处理。 

 

在spring mvc 3.1中,对应变更为 
DefaultAnnotationHandlerMapping -> RequestMappingHandlerMapping 
AnnotationMethodHandlerAdapter -> RequestMappingHandlerAdapter 
AnnotationMethodHandlerExceptionResolver -> ExceptionHandlerExceptionResolver 

以上都在使用了annotation-driven后自动注册。 
  而且对应分别提供了AbstractHandlerMethodMapping , AbstractHandlerMethodAdapter和 AbstractHandlerMethodExceptionResolver以便于让用户更方便的实现自定义的实现类。 

 

<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。

 

spring mvc <mvc:annotation-driven />会自动启动Spring MVC的注解功能,但实际它做了哪些工作呢? 

<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" /> 

 

 
从上面的配置可以看出,我的配置应该是被sping的配置覆盖了,<mvc:annotation-driven />配置中已经包含了webBindingInitializer的配置,看来使用<mvc:annotation-driven />后与原来的配置出现了重复,这种情况下不管<mvc:annotation-driven />放在上面还是放在下面都会出现问题。

 

解决方法:

使用conversion-service来注册自定义的converter 
DataBinder实现了PropertyEditorRegistry, TypeConverter这两个interface,而在spring mvc实际处理时,返回值都是return binder.convertIfNecessary(见HandlerMethodInvoker中的具体处理逻辑)。因此可以使用customer conversionService来实现自定义的类型转换。 

<mvc:annotation-driven />中配置可以看出,AnnotationMethodHandlerAdapter已经配置了webBindingInitializer,我们可以通过设置其属性conversionService来实现自定义类型转换。

 

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">  
		<property name="converters">  
	    	<list>  
	        	<bean class="com.xxx.ark.core.web.DateConverter" />  
	    	</list>  
		</property>  
	</bean>

 

 需要修改spring service context xml配置文件中的annotation-driven,增加属性conversion-service指向新增的conversionService bean。 

 

<mvc:annotation-driven conversion-service="conversionService" /> 

 

 实际自定义的converter如下。 

 

 

public class DateConverter implements Converter<String, Date> {  
@Override  
public Date convert(String source) {  
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
    dateFormat.setLenient(false);  
    try {  
        return dateFormat.parse(source);  
    } catch (ParseException e) {  
        e.printStackTrace();  
    }         
    return null;  
}  
 

 

分享到:
评论
2 楼 zhumingyuan 2013-10-30  
您好!用的的是3.2.3版本,按照您的方法配置了一下,但是还是报错了,如下:No converter found capable of converting from type java.lang.String to type org.springframework.core.io.Resource 是否是需要配置一些资源?
1 楼 BlueBing 2013-06-06  
无意间看到你这篇文章 我自己动手试了下
发现直接配置webBindingInitializer确实无效
但采用你所说的自定义方式后 依然报错
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'conversionService' defined in ServletContext resource [/WEB-INF/spring-mvc.xml]: Cannot create inner bean 'com.baijun.open.util.DateConverter#9b87f6' of type [com.baijun.open.util.DateConverter] while setting bean property 'converters'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.baijun.open.util.DateConverter] for bean with name 'com.baijun.open.util.DateConverter#9b87f6' defined in ServletContext resource [/WEB-INF/spring-mvc.xml]; nested exception is java.lang.ClassNotFoundException: com.baijun.open.util.DateConverter

相关推荐

    简易版spring、springmvc

    简易版spring、springmvc spring测试入口 com.xiaozhou.spring.Test springvmc 测试入口 com.xiaozhou.controller.TestController

    VMC安装简介

    4. 应用部署完成后,你可以通过`vmc apps`命令查看已部署的应用,然后通过`vmc logs &lt;app-name&gt;`查看应用的日志,确保应用正常运行。 以上就是VMC的安装、配置和简单应用部署的基本流程。随着对VMC的深入使用,你还...

    jquery带多种过滤效果可以选择的焦点图代码Vmc Slider.zip

    Vmc Slider是一款基于jQuery的...Vmc Slider是一款强大且灵活的焦点图解决方案,其丰富的过滤效果和自定义选项为网站增添了不少亮点。结合实际项目需求,合理运用这款插件,能够大大提高网站的视觉吸引力和用户参与度。

    98FE.vmc 虚拟机配置文件,这个文件可以起到模拟一台计算机的作用

    98FE.vmc 虚拟机配置文件,这个文件可以起到模拟一台计算机的作用

    jQuery幻灯片插件Vmc Slider

    在网页设计中,幻灯片组件经常被用来展示产品、服务或者吸引用户的注意力,而Vmc Slider正是这样一款强大的解决方案。 首先,Vmc Slider的一大特色在于其内置的20种过渡特效。这些特效为用户提供了多样化的选择,...

    VMC你值得拥有!

    通过这款名为"VirtualMotionCapture"的vmc软件,我们可以高效地进行运动捕捉工作,从而创造出更为逼真的虚拟角色和场景。 VMC技术的核心在于其能够精确地追踪和记录人体或物体的运动,通常通过红外摄像头或激光...

    JAVA VMC实例

    Java VMC(Virtual Machine Context)通常是指在Java虚拟机中运行的应用程序上下文,它涉及到的是如何在Java环境中管理和执行应用程序...通过详细研究和运行"mvcDemo"项目,你将能更好地掌握Java VMC环境下的应用开发。

    VMC750E 加工中心基本操作.ppt

    【VMC750E加工中心基本操作】是关于一种特定型号的加工中心——VMC750E的使用教程,主要涵盖了设备的开机、返回参考点、坐标显示方式、手动操作以及加工程序的管理与传输等核心内容。 1. **开机操作**:首先打开...

    Tanzu Mission Control多集群和应用管理解决方案.pptx

    VMware Tanzu Mission Control 是一款针对多集群和应用管理的解决方案,旨在提供集中式的 Kubernetes 管理能力,帮助企业在多云环境中实现高效、稳定的应用基础设施。这个平台涵盖了现代应用程序的构建、运行、管理...

    行业分类-设备装置-VPX平台单板上实现ChMC和VMC的方法及VPX平台.zip

    对于需要处理大量数据和执行复杂任务的高端应用,这种集成的管理解决方案至关重要。通过深入理解和熟练掌握ChMC和VMC的实现方法,工程师们能够更好地设计和优化VPX平台上的嵌入式系统,以满足不断增长的高性能计算...

    jQuery多种过渡特效幻灯片插件Vmc Slider源码.zip

    Vmc Slider是一款高效且灵活的解决方案,适用于创建具有专业外观的滑块组件。 Vmc Slider的核心特性包括: 1. **过渡效果**:这个插件的一大亮点在于它提供了多种过渡效果,如淡入淡出、滑动、缩放、旋转等。这些...

    Buck STM32源代码 Syn-Buck VMC v1.1

    Buck STM32源代码 Syn-Buck VMC v1.1Buck STM32源代码 Syn-Buck VMC v1.1Buck STM32源代码 Syn-Buck VMC v1.1Buck STM32源代码 Syn-Buck VMC v1.1Buck STM32源代码 Syn-Buck VMC v1.1Buck STM32源代码 Syn-Buck VMC ...

    四足机器人仿真,使用VMC算法.zip

    VMC算法是一种先进的控制策略,它通过建立虚拟模型来预测机器人的动态行为,并以此为基础对实际系统进行精确控制。 VMC算法的核心思想是首先创建一个数学模型,这个模型能够描述四足机器人的运动学和动力学特性。在...

    VMC850 TC500 调试包.rar

    VMC850 TC500 是一款针对数控机床,特别是立式加工中心的设备型号。这个调试包是为操作和维护该型号机床提供的重要参考资料,涵盖了机床的调试方法、参数设置、故障诊断以及日常维护等多个方面。下面将对这个调试包...

    新一代企业云解决方案加速数据中心转型.pdf

    新一代企业云解决方案旨在加速数据中心的转型,以...总的来说,新一代企业云解决方案通过创新的技术和模式,帮助企业在数据中心转型中加速,提升IT服务的灵活性、安全性和整体效率,为企业数字化转型奠定坚实的基础。

    VMC.zip_VMC_mdb_vending_纸币器_自动售货机

    《VMC_mdb_vending_纸币器_自动售货机——深入理解自动售货机与纸币器通讯机制》 自动售货机是日常生活中常见的便利设施,它集成了电子技术、机械工程和信息技术等多种领域的知识。在本文中,我们将深入探讨"VMC....

    W98FEOEM.vmc

    W98FEOEM.vmc W98FEOEM.vmc W98FEOEM.vmc

Global site tag (gtag.js) - Google Analytics