使用SpringMVC的时候,需要将表单中的日期字符串转换成对应JavaBean的Date类型,而SpringMVC默认不支持这个格式的转换,解决方法有两种,如下:
方法一 . 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作。
/* 以下资料来自网络 */
用@InitBinder注解的控制器方法,允许你直接在你的控制器类中配置 Web 数据绑定。@InitBinder标记初始化WebDataBinder的方法,WebDataBinder被用于填充被注解的处理方法的命令和表单对象参数。
?? 这些初始化绑定器(Init-binder)方法支持@RequestMapping方法支持的所有参数,处理命令/表单对象以及相关的校验结果对象。初始化绑定器方法必须不带返回值,所以它们通常被声明为 void 的。典型的参数包括WebDataBinder和WebRequest或 者java.util.Locale,允许用代码方式注册特定上下文的编辑器(context-specific editors)。
/* 以上资料来自网络 */
WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set的数据是日期类型, Spring就会去找到对应的editor进行转换,将String类型转换成日期类型,然后再set进去.
我们要进行类型转换,需要在springMvc里配置配型转换器,springMvc提供了很多类型转化器,配置方法如下:
text/html; charset=utf-8
然后在需要进行类型转换的controller里创建初始化绑定器方法,用对应的编辑器将接受到的字符串转为日期,代码如下:
@Controllerpublic classMyFormController
{
@InitBinderprotected voidinitBinder(WebDataBinder binder)
{
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
}
spring mvc在绑定数据之前,都会先注册这些编辑器,Spring提供了很多编辑器的实现类,像CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等,使用时候调用WebDataBinder的registerCustomEditor方法.
需要注意的是,此初始化绑定的方法,只在该Controller内生效.
这样,我们前台传递的字符串日期信息,在后台javaBean中使用Date就可以直接接收到了.
方法二: 使用@DateTimeFormat 注解方式,建议使用,此方式简单,且代码量少
首先,@DateTimeFormat 注解使用到了joda包中的东西, 我们需要引入joda相关jar包.如果不引入会报异常
joda-time
joda-time
2.9.7
然后,我们要在javaBean 中要接收的Date类型数据上加上注解: 如下:
public classPerson{privateString name;privateInteger age;privateInteger sex;//在date类型上加入注解,同时指定接收到的日期格式样式
@DateTimeFormat(pattern="yyyy-MM-dd")privateDate birthday;
}
最后,在SpringMVC配置XML文件中进行注解驱动的配置:
text/html; charset=utf-8
这样就完成了,后续只要的新增的javaBean中给日期类型加上@DateTimeFormat注解即可,任意contorller中使用javaBean接受数据时,传递的String类型数据会自动转换成对应日期类型
需要注意的是 接收字符串的日期格式需要与@DateTimeFormat注解后定义的格式一致.