后台接收datetime_后端接收java.util.Date类型的参数
1. 问题
SpringBoot⼯程(其实跟SpringBoot没有关系),在controller中指定了接收参数类型为java.util.Date,但是前端不管是发来⽇期字符串还是时间戳,都报错Failed to convert property value of type java.lang.String to required Date
2. 原因分析
SpringMVC不能⾃动转换⽇期字符串或者时间戳为java.util.Date。
3. 解决⽅法
3.1 ⽅法1
Spring有⼀个⽇期转换注解@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")可以在接⼝中将字符串类型参数yyyy-MM-dd HH:mm:ss转换为java.util.Date。举例:
//这是接⼝使⽤的参数类
public class Test {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
}
}
// 使⽤上⾯参数类的接⼝
public class TestController {
@RequestMapping(value = "/ask",method = RequestMethod.POST)
public void testMethod(Test test) {
/
/ do something
}
}
3.2 ⽅法2
在controller中添加⼀个⽅法,这个⽅法为当前接⼝的所有⽅法处理Date类型转换。
// 使⽤上⾯参数类的接⼝
public class TestController {
// 增加的⽅法
@InitBinder
protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss" );
dateFormat.setLenient(false); //是否严格解析时间 false则严格解析 true宽松解析
java valueof
}
@RequestMapping(value = "/ask",method = RequestMethod.POST)
public void testMethod(Test test) {
// do something
}
}
实际上,这⾥不仅仅可以来处理时间类型,还可以来处理其它的数据类型(⾮基本类型数据)如CustomDateEditor、CustomBooleanEditor、CustomNumberEditor等。
如果嫌弃在每个controller中添加这个⽅法不⽅便管理,还可以使⽤Spring AOP功能,新建⼀个类。
@ControllerAdvice
public class DateHandler {
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setLenient(false); //是否严格解析时间 false则严格解析 true宽松解析
}
}
这个切⾯⽅法会为每⼀个controller处理⽇期转换。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。