写点什么

@DateTimeFormat 注解 和 @JsonFormat 注解

作者:乌龟哥哥
  • 2022 年 4 月 17 日
  • 本文字数:1252 字

    阅读完需:约 4 分钟

@DateTimeFormat 注解 和 @JsonFormat 注解

一、背景


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


二、发现问题


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


三、对比总结及使用


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

  2. ①引入依赖(spring 就不写了)


<!-- joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency>
复制代码


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


package com.**.model;
import lombok.Data;
@Datapublic class User { private Integer id; private String userName; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date birth;}
复制代码


  1. @JsonFormat 后台向前台,将日期格式的数据格式转化为们所需要的数据。

  2. 前台向后台,将 Content-Type 类型为 application/json 的字符串转换为 Date 类型。u

  3. ①. 引入依赖(spring boot 项目已经帮我们引入了,所以不需要重复引入)


      <!-- joda-time -->      <dependency>      <groupId>joda-time</groupId>      <artifactId>joda-time</artifactId>      <version>2.3</version>      </dependency>
复制代码


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


package com.**.model;
import lombok.Data;
@Datapublic class User { private Integer id; private String userName; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date birth;}
复制代码


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注解。
复制代码


用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
@DateTimeFormat 注解 和 @JsonFormat 注解_4月月更_乌龟哥哥_InfoQ写作平台