900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Spring MVC 解决日期类型动态绑定问题

Spring MVC 解决日期类型动态绑定问题

时间:2020-05-01 09:19:44

相关推荐

Spring MVC 解决日期类型动态绑定问题

出处:/crazy-fox/archive//02/18/2357699.html

ean 名为User,则在相同的包中存在UserEditor类可实现customer propertyEditor的自动注册。

2:利用@InitBinder来注册customer propertyEditor

这个在之前的笔记中已经介绍过了,即在controller类中增加一个使用@InitBinder标注的方法,在其中注册customer Editor

@InitBinderinitBinder(WebDataBinderbinder){SimpleDateFormatdateFormat=SimpleDateFormat("yyyy-MM-dd");dateFormat.setLenient();binder.registerCustomEditor(Date.,CustomDateEditor(dateFormat,));}

3:继承 WebBindingInitializer 接口来实现全局注册使用@InitBinder只能对特定的controller类生效,为注册一个全局的customer Editor,可以实现接口WebBindingInitializer 。

CustomerBindingWebBindingInitializer{@OverrideinitBinder(WebDataBinderbinder,WebRequestrequest){SimpleDateFormatdateFormat=SimpleDateFormat("yyyy-MM-dd");dateFormat.setLenient();binder.registerCustomEditor(Date.,CustomDateEditor(dateFormat,));}

并修改 servlet context xml配置文件

<bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="webBindingInitializer">

<bean

class="net.zhepu.web.customerBinding.CustomerBinding" />

</property>

</bean>

但这样一来就无法使用mvc:annotation-driven 了。

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

<bean id="conversionService"

class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

<property name="converters">

<list>

<bean class="net.zhepu.web.customerBinding.CustomerConverter" />

</list>

</property>

</bean>

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

<mvc:annotation-driven validator="validator"

conversion-service="conversionService" />

实际自定义的converter如下。

CustomerConverterConverter<String,Date>{@OverrideDateconvert(Stringsource){SimpleDateFormatdateFormat=SimpleDateFormat("yyyy-MM-dd");dateFormat.setLenient();{dateFormat.parse(source);}(ParseExceptione){e.printStackTrace();};}

对于requestBody或httpEntity中数据的类型转换Spring MVC中对于requestBody中发送的数据转换不是通过databind来实现,而是使用HttpMessageConverter来实现具体的类型转换。 例如,之前提到的json格式的输入,在将json格式的输入转换为具体的model的过程中,spring mvc首先找出request header中的contenttype,再遍历当前所注册的所有的HttpMessageConverter子类, 根据子类中的canRead()方法来决定调用哪个具体的子类来实现对requestBody中的数据的解析。如果当前所注册的httpMessageConverter中都无法解析对应contexttype类型,则抛出HttpMediaTypeNotSupportedException (http 415错误)。 那么需要如何注册自定义的messageConverter呢,很不幸,在spring 3.0.5中如果使用annotation-driven的配置方式的话,无法实现自定义的messageConverter的配置,必须老老实实的自己定义AnnotationMethodHandlerAdapter的bean定义,再设置其messageConverters以注册自定义的messageConverter。 在3.1版本中,将增加annotation-driven对自定义的messageConverter的支持 (SPR-7504),具体格式如下

<mvc:annotation-driven>

<mvc:message-converters>

<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>

<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>

<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

</mvc:message-converters>

</mvc:annotation-driven>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。