0.说在前面
1.新建converter.jsp
转换器页面日期:
提交
${converteredDate }
2.新建ConverterController类
packagecom.springmvc.demo.controller;importjava.util.Date;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.servlet.ModelAndView;
@Controllerpublic classConverterController {
@RequestMapping("/initConverter.action")publicString Init(){return "converter";
}
@RequestMapping("/converter.action")publicModelAndView converter(Date myDate){
System.out.println(myDate.getTime());
ModelAndView mav=newModelAndView();
mav.addObject("converteredDate", myDate);
mav.setViewName("converter");returnmav;
}
}
从页面展示和后台打印可以看出yyyy/MM/dd格式的日期字符串会被SpringMVC自动进行日期类型转换.
4.输入yyyy-MM-dd格式的日期字符串,再进行提交
preHandle在Controller之前被调用......
四月08, 2020 10:55:20上午 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver logException
警告: Resolved [org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: Failed to convert value of type'java.lang.String' to required type 'java.util.Date'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.Date': no matching editors or conversion strategy found]
afterCompletion在视图被访问之后被调用......
从页面信息和后台打印的信息可以看出yyyy-MM-dd格式的日期字符串SpringMVC并不能自动转换成日期类型,这就需要自定义类型转换器.
5.新建包com.springmvc.demo.converter,在其中新建String2DateConverter类
packagecom.springmvc.demo.converter;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.springframework.core.convert.converter.Converter;public class String2DateConverter implements Converter{
@OverridepublicDate convert(String dateString) {
System.out.println("进入String2DateConverter转换器了,开始进行转换......");
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
Date date=null;try{
date=format.parse(dateString);
}catch(ParseException e) {
e.printStackTrace();
}returndate;
}
}
6.修改springmvc.xml,添加类型转换器的配置
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
7.重新输入yyyy-MM-dd格式的日期字符串,再进行提交
从页面和后台上的信息可以看出,yyyy-MM-dd格式的日期字符串被成功转换成了日期类型.
8.说明
(1).在7的基础上再输入yyyy/MM/dd格式的日期字符串就又不能转换了;
(2).一般项目中的日期格式都是统一的,如果是yyyy/MM/dd格式的就不需要自定义类型转换器,如果是yyyy-MM-dd格式的就可以使用这种方式自定义类型转换器;
(3).如果真是遇到了多种格式的日期格式,可以定义拦截器,在preHandle方法中对日期字段处理成统一的格式,再参考(2)中说的进行后续操作.
(4).也可以在转换器类中做些格式判断,修改String2DateConverter类如下:
packagecom.springmvc.demo.converter;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.springframework.core.convert.converter.Converter;public class String2DateConverter implements Converter{
@OverridepublicDate convert(String dateString) {
System.out.println("进入String2DateConverter的2.0版本了,开始进行转换......");
SimpleDateFormat format=null;
Date date=null;if(dateString!=null){//匹配yyyy/MM/dd格式的日期字符串
if(dateString.matches("\\d{4}/\\d{2}/\\d{2}")){
format=new SimpleDateFormat("yyyy/MM/dd");//匹配yyyy-MM-dd格式的日期字符串
}else if(dateString.matches("\\d{4}-\\d{2}-\\d{2}")){
format=new SimpleDateFormat("yyyy-MM-dd");
}try{
date=format.parse(dateString);
}catch(ParseException e) {
e.printStackTrace();
}
}returndate;
}
}
再分别进行yyyy/MM/dd和yyyy-MM-dd格式的日期字符串数据提交,就都可以了.当然,其中的正则表达式写的并不严谨,可以自行弥补不足,正确输入的两种格式的日期字符串还是可以满足的.
例如分别输入2020/04/08和2020-04-08进行提交