-
问题描述:
- 前台有个时间类型的表单项,后台的controller用的是Date()类型的参数接收,
发现运行报400错误–也就是Date类型的参数没映射上,为null了…
- 前台有个时间类型的表单项,后台的controller用的是Date()类型的参数接收,
- 原因:前台传的date是String类型的,后台用的是Date接收的,
- 解决:String 的@DateTimeFormat可解决入参的时间映射问题,
json的@JsonFormat可解决出参的时间映射问题…
样例:
pojo:
import java.util.Date;
public class DateVo {
private Date date;
public void setDate(Date date){
this.date = date;
}
public Date getDate(){
return date;
}
}
controller:
@RestController
@RequestMapping("/date/")
public class DateController {
@RequestMapping("test")
public DateVo getDate(DateVo vo){
System.out.println("date1:"+vo.getDate());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(vo.getDate());
System.out.println("date2:"+date);
DateVo vo2 = new DateVo();
vo2.setDate(new Date());
return vo2;
}
}
访问 /date/test ,并传入参数:2018-08-02 22:05:55
发现抛异常:
前台传的date是String类型的,后台用的是Date接收的,
2.入参时间格式化:
加入参时间格式化注解:
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date date;
再像上面一样访问 /date/test ,并传入参数:2018-08-02 22:05:55,将在控制台上打印:
date1:Thu Aug 02 22:05:55 CST 2018
date2:2018-08-02 22:05:55
注意: 因为 @DateTimeFormat 注解的 pattern 属性值指定的日期时间格式并不是将要转换成的日期格式,这个指定的格式是和传入的参数格式对应的,假如注解为:
@DateTimeFormat(pattern=“yyyy/MM/dd HH:mm:ss”)
则传入的参数应该是这样的:
2018/08/02 22:05:55
否则会抛出异常。
3. 出参格式化
在上述示例中,调用接口的返回结果为:
“date”: “2018-08-01T14:25:31.296+0000”
这个格式并不是我们想要的,那么如何将其进行格式化?这时就需要用到 jackson 的 @JsonFormat 注解。
public class DateVo {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss" ,
timezone = "GMT+8"
)
private Date date;
public void setDate(Date date){
this.date = date;
}
public Date getDate(){
return date;
}
}
注意: 因为,jackson在序列化时间时是按照国际标准时间GMT进行格式化的,而在国内默认时区使用的是CST时区,两者相差8小时。
所以,@JsonFormat 注解还要再加一个属性: timezone = “GMT+8”
否则:时间格式正确,但实际上当前时间是 “2018-08-01 22:32:57” ,早8个小时…
导入依赖的jar:
@JsonFormat所需要的jar包
<!--JsonFormat-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>