自学内容网 自学内容网

@DateTimeFormat 和 @JsonFormat 注解详解

@DateTimeFormat 和 @JsonFormat 注解详解

在 Java 开发中,日期和时间的处理是一个常见且复杂的问题。Spring 框架提供了多种方式来处理日期和时间的格式化问题,其中 @DateTimeFormat@JsonFormat 注解是常用的两种方式。本文将通过代码示例详细解释这两个注解的使用方法、使用场景以及它们之间的区别。

目录

  1. 总结
  2. 不使用注解
    • 2.1. Json传参测试
    • 2.2. Params传参测试
  3. Date格式问题
    • 3.1. ISO
    • 3.2. GMT
    • 3.3. UTC
    • 3.4. CST
    • 3.5. UNIX时间戳(timestamp)
    • 3.6. 获取其他时区的时间
  4. 传参格式化
    • 4.1. Json传参格式化
    • 4.2. URL传参格式化
  5. 注解
    • 5.1. @DateTimeFormat 其他属性
    • 5.2. @JsonFormat 其他属性
  6. Spring Boot全局时间格式化

总结

@DateTimeFormat@JsonFormat 注解都是用来处理时间格式化问题的。以下是它们的主要区别:

区别@DateTimeFormat@JsonFormat
使用方法@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
使用场景URL传参时,格式化前端传向后端日期类型的时间格式JSON传参,格式化前端传参和后端返回给前端的时间格式
使用地方实体类日期字段上、或者字段的set方法上、或者方法入参上实体类日期字段上、或者字段的set方法上、或者方法入参上
来源org.springframework.format.annotationcom.fasterxml.jackson.annotation

不使用注解

2.1. Json传参测试

在不使用任何注解的情况下,前端传参和后端返回参数的格式会有所不同。以下是一些测试结果:

  • 测试一:通过 Postman 调用,观察不使用这两个注解时,前端传参和后端返回参数的格式。
  • 测试二:假如前端传值格式为 2022/09/12,直接报400参数类型错误。
  • 测试三:假如前端传值格式为 2022-09-12 08:00:00,也会直接报400参数类型错误。

2.2. Params传参测试

  • 测试一:传 yyyy-MM-dd 或者传 yyyy-MM-dd HH:mm:ss 都会报400错误。

Date格式问题

3.1. ISO

国际标准 ISO 8601 是国际标准化组织的日期和时间的表示方法。典型的 ISO 格式为 2022-09-15T14:40:50.000+00:00

3.2. GMT

格林尼治标准时间(GMT)是以格林尼治天文台所在地的标准时间。格林尼治天文台位于英国伦敦。

3.3. UTC

世界协调时(UTC)是以原子时钟为基础的时间标准,比 GMT 更加科学和精确。

3.4. CST

CST 可以代表不同的时区概念,如中国标准时区(UTC+8)、古巴标准时区(UTC-4)、美国中央时区(UTC-6)等。

3.5. UNIX时间戳(timestamp)

UNIX 时间戳是以 GMT/UTC 时间 1970-01-01T00:00:00 为起点,到当前具体时间的秒数。

3.6. 获取其他时区的时间

可以通过设置时区来获取不同时区的时间。

传参格式化

4.1. Json传参格式化

添加 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 可以确保前端传什么日期和时间,后端就会收到什么,并且返回给前端的也没有时间转换。

4.2. URL传参格式化

添加 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 可以确保 URL 传参时,日期时间格式正确。

注解

5.1. @DateTimeFormat 其他属性

@DateTimeFormat 注解除了可以自定义格式外,还可以指定 ISO 格式。

5.2. @JsonFormat 其他属性

@JsonFormat 注解主要用于格式化返回类型和传参类型为 JSON 时的日期类型。

Spring Boot全局时间格式化

在 Spring Boot 中,可以通过配置文件设置全局的时间格式化:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

或者通过 Java 配置:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        converter.setObjectMapper(objectMapper);
        converters.add(converter);
    }
}

以上就是 @DateTimeFormat@JsonFormat 注解的详细解释和使用示例。希望这篇文章能帮助你更好地理解和使用这两个注解。


原文地址:https://blog.csdn.net/qq_29752857/article/details/140514535

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!