在 Spring Boot 中格式化 LocalDateTime

解决 JSON 输出时间时带 T 的问题 (格式化 LocalDateTime"yyyy-MM-dd HH:mm:ss"

解决 JSON 传入 "yyyy-MM-dd HH:mm:ss"LocalDateTime 解析失败的问题

作用范围:全局生效,无需在 @JsonFormat 里单独配置

java 复制代码
package com.postgistest.postgistest.config;

import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Configuration
public class LocalDateTimeConfig {

    /**
     * 定义时间格式:yyyy-MM-dd HH:mm:ss
     * 这将用于 LocalDateTime 的序列化(Java → JSON)和反序列化(JSON → Java)
     */
    private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 定义 LocalDateTime 的序列化规则(Java → JSON)
     * 作用:当后端返回 JSON 时,LocalDateTime 按指定格式输出,不带 T
     */
    @Bean
    public LocalDateTimeSerializer localDateTimeSerializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(PATTERN));
    }

    /**
     * 定义 LocalDateTime 的反序列化规则(JSON → Java)
     * 作用:当前端传入 "yyyy-MM-dd HH:mm:ss" 格式的时间时,Spring 能正确解析为 LocalDateTime
     */
    @Bean
    public LocalDateTimeDeserializer localDateTimeDeserializer() {
        return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(PATTERN));
    }

    /**
     * 配置 Jackson 使其支持 LocalDateTime 的序列化 & 反序列化
     * 作用:
     *  - 解决 Spring Boot 默认输出 LocalDateTime 时带 T 的问题
     *  - 解决 Spring Boot 反序列化 "yyyy-MM-dd HH:mm:ss" 失败的问题
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            // 设置全局日期格式,影响 Date、LocalDateTime
            builder.simpleDateFormat(PATTERN);

            // 注册 LocalDateTime 的序列化器
            builder.serializers(localDateTimeSerializer());

            // 注册 LocalDateTime 的反序列化器
            builder.deserializers(localDateTimeDeserializer());
        };
    }
}
相关推荐
leobertlan6 小时前
2025年终总结
前端·后端·程序员
面向Google编程6 小时前
从零学习Kafka:数据存储
后端·kafka
易安说AI7 小时前
Claude Opus 4.6 凌晨发布,我体验了一整晚,说说真实感受。
后端
易安说AI7 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
易安说AI7 小时前
用 Claude Code 远程分析生产日志,追踪 Claude Max 账户被封原因
后端
JH30738 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
颜酱9 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
qq_124987075311 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_11 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
2301_8187320611 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea