偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

在 Spring Boot 項目中,時間字段的格式化處理幾乎貫穿前后端交互的每一個環(huán)節(jié)。特別是當(dāng)后端返回包含 Date、LocalDateTime、Calendar 等時間類型的 JSON 響應(yīng)數(shù)據(jù)時,格式混亂不僅影響前端渲染體驗,也增加了調(diào)試與維護的負(fù)擔(dān)。

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

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

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

更別提 Jackson 默認(rèn)格式返回的數(shù)據(jù)五花八門,尤其在 LocalDateTime 與 Date 并存的場景下,統(tǒng)一格式化處理顯得尤為重要。

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

局部處理:@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;
}

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

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

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

路徑結(jié)構(gòu):

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 注解。

這是兼顧 全局統(tǒng)一 與 局部定制 的最佳選擇。

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

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

路徑結(jié)構(gòu):

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 控制序列化邏輯;
  • 建議用于 對格式要求高度統(tǒng)一 的項目中。

 總結(jié):選擇最適合你的那一種

方案

描述

適用場景

是否侵入實體類

靈活性

 @JsonFormat 注解

字段級配置

個性化顯示

? 需要

???

 @JsonComponent 全局定制

推薦實踐

統(tǒng)一管理、支持局部特例

? 無需

????

 @Configuration + ObjectMapper

強制全局

企業(yè)級標(biāo)準(zhǔn)化輸出

? 無需

??

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

結(jié)尾寄語:效率的本質(zhì),是對細(xì)節(jié)的掌控

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

開發(fā)效率并不等于“寫得快”,而是“寫得準(zhǔn)、改得穩(wěn)、擴得易”。

愿你也能在細(xì)節(jié)中打造高質(zhì)量的系統(tǒng)邏輯。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

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代碼開發(fā)

2022-05-09 08:17:37

InstantJava字符

2009-07-31 13:52:32

C#時間函數(shù)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技術(shù)棧公眾號