您的位置:首页 > 编程语言 > Java开发

Springmvc注解@initbinder解决类型转换问题

2017-10-08 16:48 281 查看
在使用SpringMVC的时候,经常会遇到表单中的日期字符和JavaBean
的 Date类型的转换,而SpringMVC默认不支持这个转换,所以需要手动设置,自定义数据的绑定才能解决这个问题。
在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作。
 
WebDateBinder
是用来绑定请求参数到指定的属性编辑器.由于前台传到controller
里的值是String类型的,当往Model中Set这个值的时候,如果set的这个属性是个对象,Spring就会去找到对应的editor进行转换,然后在SET进去。
代码如下:

@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}


需要在SpringMVC的配置文件加上
<!-- 解析器注册 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringHttpMessageConverter"/>
</list>
</property>
</bean>
<!-- String类型解析器,允许直接返回String类型的消息 -->
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>

换种写法

<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>


拓展:

spring mvc在绑定表单之前,都会先注册这些编辑器,Spring自己提供了大量的实现类,诸如CustomDateEditor
,CustomBooleanEditor,CustomNumberEditor等许多,基本上够用。

使用时候调用WebDataBinder的registerCustomEditor方法

registerCustomEditor源码:

public void registerCustomEditor(Class<?>requiredType, PropertyEditor propertyEditor) {

   getPropertyEditorRegistry().registerCustomEditor(requiredType,propertyEditor);

}

第一个参数requiredType是需要转化的类型。

第二个参数PropertyEditor是属性编辑器,它是个接口,以上提到的如CustomDateEditor等都是继承了实现了这个接口的PropertyEditorSupport类。

我们也可以不使用他们自带的这些编辑器类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐