随记:有关Springboot项目中的时间格式实现的几种方式

打印 上一主题 下一主题

主题 823|帖子 823|积分 2469

1.注解

        @JsonFormat  @DateTimeFormat
  1. import com.fasterxml.jackson.annotation.JsonFormat;
  2. import org.springframework.format.annotation.DateTimeFormat;
  3. import java.time.LocalDateTime;
  4. public class Event {
  5.     // 序列化和反序列化时生效
  6.     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai",shape=)
  7.     private LocalDateTime eventDate;
  8.     // 仅在接收(反序列化)时生效 (从前端接收 JSON 数据转为 Java 对象)
  9.     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  10.     private LocalDateTime createdDate;
  11.     // Getters and Setters
  12. }
复制代码


  • 两个注解的优先级
  • 处理 JSON 数据:优先使用 @JsonFormat。
  • 处理表单数据或 URL 参数:优先使用 @DateTimeFormat。
  • 如果需要处理 两种场景(JSON + 表单),可以同时使用 @JsonFormat 和 @DateTimeFormat,根据详细场景生效。
@JsonFormat 提供多个配置参数,你可以根据需要灵活调解:


  • shape:定义序列化的格式(如时间戳或字符串)。

    • 常用值:

      • JsonFormat.Shape.STRING:将日期序列化为字符串格式。
      • JsonFormat.Shape.NUMBER:将日期序列化为时间戳格式。


  • pattern:定义日期格式字符串(如 yyyy-MM-dd HH:mm:ss)。
  • timezone:指定时区(如 Asia/Shanghai 或 UTC)。
2.全局配置文件(yml)

  1. spring:
  2.   jackson:
  3.     serialization:
  4. #是否转换成时间戳 false为否,这个时候可以加上日期格式
  5.       write-dates-as-timestamps: false
  6.     date-format: yyyy-MM-dd HH:mm:ss
  7. #这是开启的
  8. spring:
  9.   jackson:
  10.     serialization:
  11.       write-dates-as-timestamps: true
  12.    
复制代码
3.自定义配置文件

  1. import com.fasterxml.jackson.databind.ObjectMapper;
  2. import com.fasterxml.jackson.databind.SerializationFeature;
  3. import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import java.text.SimpleDateFormat;
  7. @Configuration
  8. public class JacksonConfig {
  9.     @Bean
  10.     public ObjectMapper objectMapper() {
  11.         ObjectMapper objectMapper = new ObjectMapper();
  12.         // 设置全局日期格式
  13.         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
  14.         // 注册 JavaTimeModule 以支持 Java 8 日期时间 API(如 LocalDateTime)
  15.         objectMapper.registerModule(new JavaTimeModule());
  16.         // 禁用时间戳序列化
  17.         objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  18.         return objectMapper;
  19.     }
  20. }
复制代码

详细的优先级就是 

注解 (@JsonFormat > @DateTimeFormat) > 全局格式的(自定义类> 配置yaml) 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表