• springboot全局设置LocalDateTime的格式解析


    背景:

    程序中使用LocalDateTime类型, 在api返回response时,LocalDateTime类型的数据返回的格式是数组形式,非常不便于展示和解析。 原有的通过修改application.yaml方式也行不通,因为使用的是LocalDateTime, 不是DateTime类型。

    解决方法:

    备注:如下方式对LocalDateTime 类型字段不起作用。

    在application .yaml增加如下内容不生效

    spring:
      jackson:
        default-property-inclusion: non_null
        date-format: yyyyMMdd HH:mm:ss
        time-zone: GMT+8
    
    • 1
    • 2
    • 3
    • 4
    • 5

    先直接贴上在本人程序中生效的方法
    增加一个时间解析类本人程序中只使用了LocalDateTime类

    
    @Configuration
    public class DateFormatConfig {
    
        @Value("${spring.jackson.date-format:yyyyMMdd HH:mm:ss}")
        private String pattern;
    
        @Bean
        @Primary
        public ObjectMapper serializingObjectMapper() {
        // 备注这里新生成来一个ObjectMapper对象,在本人的实际程序中不是在这里生成ObjectMapper ,是在原有project的common module中修改了已有ObjectMapper bean
        //这里为了展示方便,直接在新类中生成
            ObjectMapper objectMapper = new ObjectMapper();
            JavaTimeModule javaTimeModule = new JavaTimeModule();
            javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
            javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
            objectMapper.registerModule(javaTimeModule);
            return objectMapper;
        }
    
        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 deserializationContext) throws IOException {
                return LocalDateTime.parse(p.getValueAsString(), DateTimeFormatter.ofPattern(pattern));
            }
        }
    }
    
    
    • 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

    直接使用注解

    在使用LocalDateTime的类定义上直接添加类似这样注解也可以,但是这种方式不是全局配置,并且需要修改多处,不建议使用

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private LocalDateTime lastUpdate;
    
    • 1
    • 2

    禁用date as timestamps

    ObjectMapper mapper = new ObjectMapper();
     mapper.registerModule(new JavaTimeModule());
     mapper.disable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    
    • 1
    • 2
    • 3

    这种方式导致显示效果为

    “timestamp”: “2022-11-12T15:42:38.836428”,

    参考文档

    https://www.baeldung.com/spring-boot-formatting-json-dates
    https://stackoverflow.com/questions/73762782/in-spring-boot-the-jackson-with-localdatetime-serialization-error

  • 相关阅读:
    redisTemplate、jedis、lettuce、redission的对比
    查询缓存-缓存更新-缓存穿透-缓存雪崩-缓存击穿
    HiAI Foundation助力端侧音视频AI能力,高性能低功耗释放云侧成本
    浅谈Python在人工智能领域的应用
    轻仓的贵金属白银今日走势分析
    one-hot Embedding 理论知识详解 + 代码实操 (为学习笔记模式,同时附完整代码)【独热向量编码】
    「南凌科技SASE DAY」助力企业数字化转型的挑战和应对实践
    「秋招」这份各大厂面试万金油手册,吃透保你进大厂
    实训笔记9.1
    汇编语言实验八-《汇编语言-王爽老师》
  • 原文地址:https://blog.csdn.net/russle/article/details/127820794