@DateTimeFormat 和 @JsonFormat 注解详解
@DateTimeFormat 和 @JsonFormat 注解详解
在 Java 开发中,日期和时间的处理是一个常见且复杂的问题。Spring 框架提供了多种方式来处理日期和时间的格式化问题,其中 @DateTimeFormat
和 @JsonFormat
注解是常用的两种方式。本文将通过代码示例详细解释这两个注解的使用方法、使用场景以及它们之间的区别。
目录
- 总结
- 不使用注解
- 2.1. Json传参测试
- 2.2. Params传参测试
- Date格式问题
- 3.1. ISO
- 3.2. GMT
- 3.3. UTC
- 3.4. CST
- 3.5. UNIX时间戳(timestamp)
- 3.6. 获取其他时区的时间
- 传参格式化
- 4.1. Json传参格式化
- 4.2. URL传参格式化
- 注解
- 5.1. @DateTimeFormat 其他属性
- 5.2. @JsonFormat 其他属性
- 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.annotation | com.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)!