一、@DateTimeFormat和@JsonFormat区别
相同点
- 两个注解都可以作用到字段上
- 都可以对接收和返回的时间字段进行格式化(网上有些文章此处就说错了)
不同点
- @JsonFormat注解来源于jackson-databind-XXX.jar包中,SpringBoot项目引入spring-boot-starter-web时就会携带该jar包
- @DateTimeFormat注解来源于spring-boot-XXX.jar包中,SpringBoot项目中会携带该jar包
- 两个注解的使用场景不同
提示:@DateTimeFormat和@JsonFormat注解一般是针对于Date和LocalDateTime类型使用,LocalDate类型不需要使用
@DateTimeFormat
- 只能格式化前端传入的时间字符串转换成Date类型或LocalDateTime类型,不能格式化后端的日期字段给前端
- 仅支持前端使用表单键值对的请求提交方式(url拼接的参数才生效,如果是放到RequestBody中的form-data也是无效的)
- 不支持Json格式的请求提交方式(即不能格式化请求体中json参数)
- 适用于Get请求和Post请求
@JsonFormat
- 该注解既可以格式化前端传给后端的参数,也可以格式化后端传给前端的参数
- 仅支持Json格式的请求提交方式(即可以格式化请求体中json参数)
- 不支持前端使用表单键值对的请求提交方式(url拼接的参数无效)
- 适用于Get请求和Post请求
二、@DateTimeFormat和@JsonFormat的使用
@DateTimeFormat
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date date;
- 1
- 2
@JsonFormat
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date date;
- 1
- 2
三、小结
根据上面的区别我们就很容易的区分处何时用哪个注解了吧,小面小结一下吧:
@DateTimeFormat
- 适用于GET请求中请求参数场景,因为GET请求是将参数添加到url后面的
@JsonFormat
- 适用于POST请求且请求参数是以json格式发送的场景
- 后端响应给前端的实体类中