@DateTimeFormat 注解 和 @JsonFormat 注解

简介: @DateTimeFormat 注解 和 @JsonFormat 注解

一、背景

平常在web开发过程中,在前后台日期数据的交互过程中,经常会遇到一些问题。实体类里面使用的是java.util.Date类型保存日期数据。而前台向后台传递数据的时候用的是字符串。这样会出现格式转换问题。而在后台向前台传递数据的过程中。日期格式将会被转换为长整型。这显然不是我们想要的结果。为了解决此类问题。就用到了@DateTimeFormat注解  和 @JsonFormat 注解。

二、发现问题

在网上查阅资料的过程中,发现大部分作者给出的解释并不全面,大多数都是说,前台向后台传递数据用@DateTimeFormat注解。而后台向前台传递就用@JsonFormat注解。。实际上@DateTimeFormat注解只会在类似@RequestParam的请求参数(url拼接的参数才生效,如果是放到RequestBody中的form-data也是无效的)上生效,如果@DateTimeFormat放到@RequestBody下是无效的。而@JsonFormat注解却可以转换这种情况下的参数。

三、对比总结及使用

  1. @DateTimeFormat用于前台向后台 ,将传入的字符串转换为Date类型。当然只能转换类似于@RequestParam()这种url拼接的参数。
    ①引入依赖(spring就不写了)

<!-- joda-time -->

<dependency>

<groupId>joda-time</groupId>

<artifactId>joda-time</artifactId>

<version>2.3</version>

</dependency>

      ② 在实体类的需要类型转换的属性上加上@DateTimeFormat注解。

packagecom.**.model;

importlombok.Data;

@Data

publicclassUser {

   privateIntegerid;

   privateStringuserName;

   @DateTimeFormat(pattern="yyyy-MM-dd")

   privateDatebirth;

}

  1. @JsonFormat 后台向前台,将日期格式的数据格式转化为们所需要的数据。
     前台向后台,将 Content-Type类型为application/json的字符串转换为Date类型。u
    ①. 引入依赖(spring boot项目已经帮我们引入了,所以不需要重复引入)

<!--joda-time-->

<dependency>

<groupId>joda-time</groupId>

<artifactId>joda-time</artifactId>

<version>2.3</version>

</dependency>

    ② 在实体类的需要类型转换的属性上加上@JsonFormat注解。

packagecom.**.model;

importlombok.Data;

@Data

publicclassUser {

   privateIntegerid;

   privateStringuserName;

   @DateTimeFormat(pattern="yyyy-MM-dd")

   privateDatebirth;

}

3.参数解释

<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>

四、总结

1.后台向前台的日期类型格式化。只需要@JsonFormat一个注解就可以了

2.前台向后台则需要 需求分析到底使用@JsonFormat注解 还是 @DateTimeFormat注解。


相关文章
|
前端开发 Java Maven
【注解使用】使用@JsonFormat注解踩过的坑
【注解使用】使用@JsonFormat注解踩过的坑
134 0
|
Java 测试技术 数据库
JsonFormat遇到夏时制
前段时间遇到一个离谱的问题,用户的生日通过后端返回直接少了一天,debug半天发现每次在调试时数据库返回都是正确的值,但是接口响应体中莫名奇妙,减少一天。
527 0
|
XML JSON 前端开发
SpingMVC中日期格式化与转换的那些事
SpingMVC中日期格式化与转换的那些事
86 0
|
6月前
Jackson 使用 @JsonFormat 注解进行时间格式化
Jackson 使用 @JsonFormat 注解进行时间格式化
530 2
|
7月前
|
JSON Java 数据格式
Spring Boot 中的 @DateTimeFormat 和 @JsonFormat 的用法及作用
【6月更文挑战第11天】在开发 Spring Boot 应用时,处理日期和时间数据是一个常见的需求。Spring Boot 提供了两个注解 @DateTimeFormat 和 @JsonFormat 来帮助我们处理这些问题。
526 4
|
7月前
@DateTimeFormat与@JsonFormat
@DateTimeFormat与@JsonFormat
|
前端开发
【注解使用】@JsonFormat与@DateTimeFormat注解的使用
【注解使用】@JsonFormat与@DateTimeFormat注解的使用
227 0
|
JSON 前端开发 Java
Java——jackson的注解@JsonProperty、@JsonIgnore、@JsonIgnoreProperties、@JsonFormat、@JSONField
Java——jackson的注解@JsonProperty、@JsonIgnore、@JsonIgnoreProperties、@JsonFormat、@JSONField
|
Java Spring
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
291 0
SpringMVC - 数据格式化(@DateTimeFormat & @NumberFormat)(一)
|
前端开发 Java Spring
【小家Spring】@DateTimeFormat和@NumberFormat以及@JsonFormat的使用
【小家Spring】@DateTimeFormat和@NumberFormat以及@JsonFormat的使用
【小家Spring】@DateTimeFormat和@NumberFormat以及@JsonFormat的使用