在 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());
        };
    }
}
相关推荐
一点程序5 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
奋进的芋圆7 小时前
Spring Boot 实现三模安全登录:微信扫码 + 手机号验证码 + 邮箱验证码
spring boot·redis·微信
怪兽源码7 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
csdn_aspnet7 小时前
ASP.NET Core 中的依赖注入
后端·asp.net·di·.net core
昊坤说不出的梦8 小时前
【实战】监控上下文切换及其优化方案
java·后端
疯狂踩坑人9 小时前
【Python版 2026 从零学Langchain 1.x】(二)结构化输出和工具调用
后端·python·langchain
m0_7400437310 小时前
【无标题】
java·spring boot·spring·spring cloud·微服务
重整旗鼓~10 小时前
1.外卖项目介绍
spring boot
橘子师兄10 小时前
C++AI大模型接入SDK—ChatSDK封装
开发语言·c++·人工智能·后端
@ chen10 小时前
Spring事务 核心知识
java·后端·spring