在使用
SpringMVC
的时候,经常会遇到表单中的日期字符串和JavaBean
的Date
类型的转换,而SpringMVC
默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题。类型转换器常用于转换double、float、date
等类型,SpringMVC
在支持自身的转换器框架的同时也支持JavaBean
的PropertyEditor
,可以通过在控制器中使用@initBinder
添加自定义的编辑器,也可以通过WebBindingInitializer
装配全局的类型编辑器。WebDataBinder
是用来绑定请求参数到指定的属性编辑器.由于前台传到controller
里的值是String
类型的,当往Model
里Set
这个值的时候,如果set
的这个属性是个对象,Spring
就会去找到对应的editor
进行转换,然后再SET
进去。下面介绍如何使用自定义的类型编辑器
使用WebBindingInitializer
转换数据:
- 自定义属性编辑器
- 实现
WebBindingInitializer
接口 - 通过
AnnotationMethodHandlerAdapter
装配自定义编辑器
// 自定义属性编辑器
public class DateEditor extends PropertyEditorSupport {
// 将传入的字符串数据转换成Date类型
@Override
public void setAsText(String text) throws IllegalArgumentException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = dateFormat.parse(text);
setValue(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
// 实现WebBindingInitializer接口
public class DateBindingInitializer implements WebBindingInitializer {
@Override
public void initBinder(WebDataBinder binder, WebRequest request) {
// 注册自定义编辑器
binder.registerCustomEditor(Date.class, new DateEditor());
}
}
springmvc-config.xml
<!-- 通过AnnotationMethodHandlerAdapter装配自定义编辑器 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="com.zhougl.binding.DateBindingInitializer" />
</property>
</bean>
网友评论