liujie
2026-05-20 581646569a0273486c742a60961ecd98e60c6773
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.xiaopeng.maintenance.config;
 
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
 
/**
 * Jackson LocalTime 序列化/反序列化配置
 *
 * <p>兼容前端以 HH:mm(无秒)传参的场景,同时支持 HH:mm:ss(带秒)。</p>
 */
@Configuration
public class JacksonLocalTimeConfig {
 
    /**
     * LocalTime 反序列化:兼容 HH:mm / HH:mm:ss
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer localTimeDeserializerCustomizer() {
        DateTimeFormatter parseFormatter = new DateTimeFormatterBuilder()
                .appendPattern("HH:mm")
                .optionalStart()
                .appendPattern(":ss")
                .optionalEnd()
                .toFormatter();
 
        DateTimeFormatter writeFormatter = DateTimeFormatter.ofPattern("HH:mm");
 
        return builder -> {
            builder.deserializerByType(LocalTime.class, new LocalTimeDeserializer(parseFormatter));
            builder.serializerByType(LocalTime.class, new LocalTimeSerializer(writeFormatter));
        };
    }
}