目录标题

  • @JsonFormat与@DateTimeFormat注解的区分和使用
    • 1.背景
    • 2.@JsonFormat代码示例
      • 步骤
      • 注意
    • 3.@DateTimeFormat代码示例
      • 步骤
      • 注意
    • 总结:

@JsonFormat与@DateTimeFormat注解的区分和使用

1.背景

时间问题一直是个比较头疼的问题。 以后台为基准参考:我们想要在后台对从数据库、第三方API接口获取到的时间进行“格式化”需要用到【@JsonFormat】注解;我们通过后台给前台传递指定格式的时间也是通过【@JsonFormat】;如果是后台接收前台传来的时间进行格式化需要用到【@DateTimeFormat】。

@JsonFormat是jackson包的。

2.@JsonFormat代码示例

步骤

1.使用maven引入@JsonFormat所需要的jar包,我贴一下我这里的pom文件的依赖

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

注意:
==如果你是springboot项目,且你的pom文件里面有spring-boot-starter-web 依赖,那么大可不必导入上面的jackson依赖了。因为spring-boot-starter-web 依赖里面引入了spring-boot-starter-json 依赖。==你可以鼠标点击进去依赖里面看看。

2.在你需要查询出来的时间的数据库字段对应的实体类的属性上添加@JsonFormat

import java.util.Date;import com.fasterxml.jackson.annotation.JsonFormat;public class TestClass {@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")@ApiModelProperty("开始时间")private Date startTime;@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "GMT+8")@ApiModelProperty("结束时间")private Date endTime;
}

这里解释一下:@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”):

   pattern:是你需要转换的时间日期的格式timezone:是时间设置为东八区,避免时间在转换中有误差

提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别

3.完成上面两步之后,我们用对应的实体类来接收数据库查询出来的结果时就完成了时间格式的转换,再返回给前端时就是一个符合我们设置的时间格式了

注意

后台debug是看不出后台给前台格式的时间的,只有在前台才能看到。

3.@DateTimeFormat代码示例

步骤

1.@DateTimeFormat的使用和@JsonFormat差不多,首先需要引入是spring还有jodatime,spring我就不贴了

<!-- joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency>

2.在controller层我们使用spring mvc 表单自动封装映射对象时,我们在对应的接收前台数据的对象的属性上加@DateTimeFormat

@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date symstarttime;@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date symendtime;

我这里就只贴这两个属性了,这里我两个注解都同时使用了,因为我既需要取数据到前台,也需要前台数据传到后台,都需要进行时间格式的转换,可以同时使用

3.通过上面两个步骤之后,我们就可以获取一个符合自定义格式的时间格式存储到数据库了

注意

我们知道前端提交字符串到后台映射为Date类型可以加上@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解,但是有时候加了还是报错while it seems to fit format ‘yyyy-MM-dd‘T‘HH:mm:ss.SSSZ‘, parsing fails (leniency? null))

错误的大致意思就是字符串映射到Date类型失败,说我们的格式的确是符合的,但是还是映射失败。

完整错误:

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.Date` from String "2020-07-31 07:25:29": not a valid representation (error: Failed to parse Date value '2020-07-31 07:25:29': Cannot parse date "2020-07-31 07:25:29": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null)); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String "2020-07-31 07:25:29": not a valid representation (error: Failed to parse Date value '2020-07-31 07:25:29': Cannot parse date "2020-07-31 07:25:29": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null))at [Source: (PushbackInputStream); line: 1, column: 87] (through reference chain: com.xb.entity.Meeting["endTime"])at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:241)at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:223)at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:206)at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157)at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130)at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)at..........

我们知道前端提交字符串到后台映射日期类型的话,加上@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解就行了,本人亲测SpringMVC环境可行,但此次报错的项目是SpringBoot项目,不知道是SpringBoot项目导致的转换失败还是SpringBoot项目所使用的SpringMVC版本太高才导致转换失败(这个有兴趣的小伙伴可以测试)

解决方案:
在application.yml中添加如下配置

spring: jackson:date-format: yyyy-MM-dd HH:mm:ss

总结:

注解@JsonFormat主要是后台到前台的时间格式的转换
注解@DataTimeFormat主要是前后到后台的时间格式的转换

【Java日期时间】@JsonFormat与@DateTimeFormat注解的区分和使用相关推荐

  1. java日期时间转日期_Java时间和日期指南

    java日期时间转日期 长期以来,正确处理日期,时间,时区,夏令时,and年等一直是我的烦恼. 本文并不是一个全面的指南时域,请参阅日期和时间在Java中 -更详细,但略有下降,ekhem,日期. 它 ...

  2. java8 日期api_我们多么想要新的Java日期/时间API?

    java8 日期api 当前的Java.net 民意测验问题是:" 对于用Java 8实现的JSR-310(新的日期和时间API)有多重要? "在我撰写本文时,将近150位受访者投 ...

  3. 我们多么想要新的Java日期/时间API?

    当前的Java.net 民意测验问题是:" 对于用Java 8实现的JSR-310(新的日期和时间API)有多重要? "在我撰写本文时,将近150位受访者投了赞成票,绝大多数人回答 ...

  4. java时间规划书_【计算机本科补全计划】Java学习笔记(九) Java日期时间

    正文之前 终于好像仿佛看完了菜鸟教程的Java课程,感觉自己收获颇丰!很好,Java看完之后正愁如何开始进阶呢!结果发现菜鸟还准备了Java实例这种好东西!简直就是教程界的良心啊 !!!没事,先写写笔 ...

  5. java datetime 转换_如何实现Java日期时间格式转换

    Java日期时间以及日期相互转换 Java日期时间,以及相互转化,供大家参考,具体内容如下 package com.study.string; import java.text.ParseExcept ...

  6. @JsonFormat与@DateTimeFormat注解的使用

    本文来说下@JsonFormat与@DateTimeFormat注解的使用 文章目录 概述 概述

  7. 【零基础学Java】—Java 日期时间(三十二)

    [零基础学Java]-Java 日期时间(三十二) DateFormat 是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间. 日期/时间格式化子类(如SimpleDateFor ...

  8. 【零基础学Java】—Java 日期时间(三十一)

    [零基础学Java]-Java 日期时间(三十一) java.util.Date:表示日期和时间的类 类Date表示特定的瞬间,精确到毫秒 毫秒:千分之一秒,1000毫秒=1秒 特定的时间:一个时间点 ...

  9. java 日期时间工具_Java日期时间类工具

    Java日期时间类工具 Java日期时间类 Date类 Java提供的Date类和Calendar类用于处理日期和时间的类,包括创建日期,时间对象,获取系统当前日期,时间 等操作.但Date类无法实现 ...

最新文章

  1. 远望智库未来产业研究院与资本实验室联合发布《2021全球区块链应用市场报告》...
  2. php中对MYSQL操作之事务控制,回滚
  3. Win7 修改默认Administrator 密码方法
  4. Netsparker超轻量级Web安全漏洞扫描工具使用教程介绍
  5. ES6_解构赋值_note
  6. 数据返回nan_数据处理教程
  7. POJ 1821 Fence(单调队列优化DP)
  8. 蚂蚁金服数据库性能超甲骨文引热议;三大运营商 5G 预约用户接近 930 万;苹果发布新版 Mac 系统| 极客头条...
  9. Linux的压缩相关命令(转载)
  10. # SUMO 仿真建模
  11. notepad++ 将JSON压缩成一行与JSON格式化
  12. 系统集成项目管理工程师10大管理5个过程组47个过程域
  13. 产品经理项目流程(四)——需求文档
  14. VeryCD新建2组中国eMule服务器
  15. c语言魔除,菜鸟学编程(C语言版)
  16. 每日一句:day06——From Zero To Hero
  17. English job interview Questions and Answers
  18. 关于活动开始时间大于结束时间的验证
  19. 将服务添加到桌面快捷方式
  20. 如何正确选择数控机床夹具?

热门文章

  1. 【观察】联想的“空中加油”,为智慧中国而战
  2. Word for mac 2019新增功能
  3. python 操作系统和进程
  4. 文件宝iOS/iPhone/iPad客户端简介
  5. 我收集到的不收版面费而又有刊号的期刊杂志
  6. 【蓝桥杯】承压计算python实现
  7. Windows中Splinter的安装和使用
  8. win10禁用驱动程序强制签名
  9. android在使用单位方面,《Android项目实战——手机安全卫士》_面试题答案.docx
  10. 7-1 计算职工工资 (15分)