@DateTimeFormat和@JsonFormat
1、准备
定义pojo类
@Data
public class DateVo {
private Date date;
}
定义controller
@RestController
public class DateController {
/**
* 通过表单获取传递的数据
* @param vo
* @return
*/
@PostMapping("/post_form_date")
public DateVo postFormDate(DateVo vo) {
System.out.println("date:" + vo.getDate());
return vo;
}
/**
* http body 中传递json格式数据
* @param vo
* @return
*/
@PostMapping("/post_date")
public DateVo postDate(@RequestBody DateVo vo) {
System.out.println("date:" + vo.getDate());
return vo;
}
}
2、验证
未做任何处理的pojo类,在传入时间字符串是无法将String类型转为
Date,导致后台抛出异常。

后台抛出异常,提示无法将String转化为Date

2.1、使用DateTimeFormat解决
2.1.1、入参以表单方式传入时间类型字符串
使用DateTimeFormat注解修改pojo,并指定输入的日期格式。
@Data
public class DateVo {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date date;
}
返回结果正确,但是返回的日期是未格式化的
如果入参格式未严格按照yyyy-MM-dd的格式输入,也是无法转化,例如“2020-8-12”是无法转化的,要入参改为“2020-08-12”。

2.1.2、入参以Http Body方式传入JSON时间类型字符串
以Http Body方式传入,后台的controller需要使用RequestBody注解。
返回结果正确,但是返回的日期是未格式化的。

2.2、使用JsonFormat解决
使用JsonFormat注解修改pojo,并指定输入的日期格式和时区。
@Data
public class DateVo {
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date date;
}
2.2.1、只能以Http Body方式传入JSON时间类型字符串
以Http Body方式传入,后台的controller需要使用RequestBody注解。
返回结果正确,但是返回的日期是格式化的。

3、使用
将pojo类的属性加入两个注解,可实现多种入参方式转化
@Data
public class DateVo {
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date date;
}
4、区别
- DateTimeFormat注解的属性,可接收时间格式的字符串并转化为时间类型,但是字符串要严格遵守格式,例如“2020-8-12”是无法转化的,要写为2020-08-12。
- DateTimeFormat对响应实体的属性是不做格式化的。
- JsonFormat注解的属性,可将http body中传递时间格式的字符串并转化为时间类型,对响应的实体,也做格式化。

浙公网安备 33010602011771号