@DateTimeFormat 注解 和 @JsonFormat 注解

举报
炒香菇的书呆子 发表于 2022/04/17 23:47:35 2022/04/17
【摘要】 一、背景平常在web开发过程中,在前后台日期数据的交互过程中,经常会遇到一些问题。实体类里面使用的是java.util.Date类型保存日期数据。而前台向后台传递数据的时候用的是字符串。这样会出现格式转换问题。而在后台向前台传递数据的过程中。日期格式将会被转换为长整型。这显然不是我们想要的结果。为了解决此类问题。就用到了@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注解。

package com.**.model;

import lombok.Data;

@Data
public class User {
    private Integer id;
    private String userName;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;
}
  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注解。

package com.**.model;

import lombok.Data;

@Data
public 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注解。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。