成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

徹底解決時間格式混亂!Spring Boot 全局時間格式化三大終極方案!

開發 前端
在實際開發中,你可以根據業務一致性要求與格式控制自由度進行靈活選型。千萬不要小看這些格式化技巧,它們正是代碼整潔性與工程穩定性的關鍵。

時間處理混亂是隱患,不容忽視

在 Spring Boot 項目中,時間字段的格式化處理幾乎貫穿前后端交互的每一個環節。特別是當后端返回包含 Date、LocalDateTime、Calendar 等時間類型的 JSON 響應數據時,格式混亂不僅影響前端渲染體驗,也增加了調試與維護的負擔。

很多開發者初期通過 SimpleDateFormat 臨時處理,諸如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date parsed = sdf.parse(sdf.format(payEndTime()));

雖然有效,但這類寫法 重復、冗余、不可控,一旦字段眾多,維護將成為噩夢。

更別提 Jackson 默認格式返回的數據五花八門,尤其在 LocalDateTime 與 Date 并存的場景下,統一格式化處理顯得尤為重要。

本文將從三個層面徹底攻克這一問題,讓你的時間字段“格式統一、維護無憂”。

局部處理:@JsonFormat 注解方式(適用于個性化場景)

該方式雖然不是真正意義上的“全局配置”,但勝在直觀、簡單,適合處理少量字段定制化格式需求。

路徑示例:

src/main/java/com/icoderoad/order/dto/OrderDTO.java
@Data
public class OrderDTO {


    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private LocalDateTime createTime;


    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}

這種方式的特點是:僅當前字段生效,需要在每一個時間字段上單獨聲明,靈活但重復。

推薦實踐:@JsonComponent + 自定義序列化器(推薦)

這種方式適用于希望在不侵入實體類的前提下,統一格式化 Date 和 LocalDateTime 類型。

路徑結構:

src/main/java/com/icoderoad/config/DateFormatConfig.java

配置類核心代碼:

@JsonComponent
public class DateFormatConfig {


    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    private String pattern;


    @Bean
    public Jackson2ObjectMapperBuilderCustomizer dateCustomizer() {
        return builder -> {
            TimeZone tz = TimeZone.getTimeZone("UTC");
            DateFormat df = new SimpleDateFormat(pattern);
            df.setTimeZone(tz);
            builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
                   .dateFormat(df);
        };
    }


    @Bean
    public LocalDateTimeSerializer localDateTimeSerializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }


    @Bean
    public Jackson2ObjectMapperBuilderCustomizer localDateTimeCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
    }
}

 配置說明:

  • 全局對 Date 類型格式化;
  • 對 LocalDateTime 類型使用自定義序列化器;
  • 如需個別字段使用不同格式,仍可疊加使用 @JsonFormat 注解。

這是兼顧 全局統一 與 局部定制 的最佳選擇。

強制全局配置:@Configuration + ObjectMapper 方式(優先級最高)

這套方式直接配置 Jackson 的 ObjectMapper,強制所有時間格式按照設定規則進行序列化與反序列化。

路徑結構:

src/main/java/com/icoderoad/config/GlobalDateTimeConfig.java
@Configuration
public class GlobalDateTimeConfig {


    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    private String pattern;


    private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();


        JavaTimeModule timeModule = new JavaTimeModule();
        timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
        timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
        mapper.registerModule(timeModule);


        return mapper;
    }


    @Component
    public class DateSerializer extends JsonSerializer<Date> {
        @Override
        public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            gen.writeString(dateFormat.format(value));
        }
    }


    @Component
    public class DateDeserializer extends JsonDeserializer<Date> {
        @Override
        public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            try {
                return dateFormat.parse(p.getValueAsString());
            } catch (ParseException e) {
                throw new RuntimeException("Invalid date format", e);
            }
        }
    }


    public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
        @Override
        public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            gen.writeString(value.format(DateTimeFormatter.ofPattern(pattern)));
        }
    }


    public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
        @Override
        public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            return LocalDateTime.parse(p.getValueAsString(), DateTimeFormatter.ofPattern(pattern));
        }
    }
}

注意事項:

  • 一旦使用此種配置,實體類中 @JsonFormat 將不再生效;
  • 完全由 ObjectMapper 控制序列化邏輯;
  • 建議用于 對格式要求高度統一 的項目中。

 總結:選擇最適合你的那一種

方案

描述

適用場景

是否侵入實體類

靈活性

 @JsonFormat 注解

字段級配置

個性化顯示

? 需要

???

 @JsonComponent 全局定制

推薦實踐

統一管理、支持局部特例

? 無需

????

 @Configuration + ObjectMapper

強制全局

企業級標準化輸出

? 無需

??

在實際開發中,你可以根據業務一致性要求與格式控制自由度進行靈活選型。千萬不要小看這些格式化技巧,它們正是代碼整潔性與工程穩定性的關鍵。

結尾寄語:效率的本質,是對細節的掌控

Spring Boot 中的時間格式化,看似微不足道,卻隱藏著諸多陷阱。通過本文三種方案的深入剖析,相信你已能優雅處理各類時間字段,不再為格式不統一而頭疼。

開發效率并不等于“寫得快”,而是“寫得準、改得穩、擴得易”。

愿你也能在細節中打造高質量的系統邏輯。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2020-11-03 10:21:33

MySQL

2020-09-01 21:03:10

Springboot格式化方式

2022-09-05 08:06:36

SpringBoot時間格式化

2021-07-26 14:34:02

springboot 時間格式化項目

2022-01-07 13:34:25

Java時間格式化

2022-06-26 08:39:19

Spring容器字段格式化

2009-08-03 14:25:59

C#日期格式化

2023-06-13 07:50:49

Gopher格式化時間

2010-07-29 11:12:30

Flex日期格式化

2009-08-03 16:24:05

C#格式化

2025-03-03 00:13:50

2023-11-28 08:36:16

Spring中Body讀取

2024-01-08 22:03:22

python代碼開發

2022-05-09 08:17:37

InstantJava字符

2009-07-31 13:52:32

C#時間函數C#時間格式

2024-12-09 08:10:00

Python字符串格式化

2025-06-17 06:40:45

DockerDocker鏡像

2022-04-13 10:38:04

Springboot日期時間格式化

2009-07-23 18:58:40

微軟Linux虛擬化

2010-07-16 16:00:08

Perl格式化輸出
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区在线视频 | 成人性生交大片免费看r链接 | 久久久久久久国产 | 国产综合精品一区二区三区 | 91精品国产91久久久久久 | 在线播放精品视频 | 视频第一区 | 精品久久久久久久久久久久久久 | 中文字幕动漫成人 | 欧美日韩亚洲成人 | 国产亚洲久 | 欧美一区二区在线免费观看 | 日韩精品免费在线 | 久久91 | 久久r久久 | 本道综合精品 | 日本三级在线网站 | 在线看av网址 | 91观看| 国产精品免费一区二区三区 | 日韩欧美中文字幕在线观看 | 亚洲一区二区中文字幕在线观看 | 91国产精品 | 中文字幕亚洲视频 | 97色在线观看免费视频 | 国产精品久久久久久一区二区三区 | 色毛片 | 97国产精品视频 | 天堂亚洲网 | 真人女人一级毛片免费播放 | 午夜精品久久久久99蜜 | 成人欧美一区二区三区黑人孕妇 | av大全在线观看 | 国产视频在线一区二区 | 99热精品久久| 在线色网址| 欧美成人精品一区二区男人看 | 亚洲一区二区三区在线视频 | 色综合视频 | 偷拍自拍网站 | 91精品国产一区二区三区蜜臀 |