@DateTimeFormat和@JsonFormat

一、@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

  1. 只能格式化前端传入的时间字符串转换成Date类型或LocalDateTime类型,不能格式化后端的日期字段给前端
  2. 仅支持前端使用表单键值对的请求提交方式(url拼接的参数才生效,如果是放到RequestBody中的form-data也是无效的)
  3. 不支持Json格式的请求提交方式(即不能格式化请求体中json参数)
  4. 适用于Get请求和Post请求

@JsonFormat

  1. 该注解既可以格式化前端传给后端的参数,也可以格式化后端传给前端的参数
  2. 仅支持Json格式的请求提交方式(即可以格式化请求体中json参数)
  3. 不支持前端使用表单键值对的请求提交方式(url拼接的参数无效)
  4. 适用于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

  1. 适用于GET请求中请求参数场景,因为GET请求是将参数添加到url后面的

@JsonFormat

  1. 适用于POST请求且请求参数是以json格式发送的场景
  2. 后端响应给前端的实体类中

你可能感兴趣的:(java,数据库,spring)