在 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());
        };
    }
}
相关推荐
计算机毕设VX:Fegn089516 小时前
计算机毕业设计|基于springboot + vue博物馆展览与服务一体化系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
帅气的你16 小时前
Spring Boot 1.x 接口性能优化:从 3 秒到 200 毫秒的实战调优之路
java·spring boot
Mars酱17 小时前
1分钟了解响应式编程 | 合适的架构调整
java·后端·响应式编程
yangminlei17 小时前
Spring Boot/Spring MVC核心注解深度解析
spring boot
浪客川17 小时前
【百例RUST - 005】所有权和切片
开发语言·后端·rust
ChildrenGreens17 小时前
otel-collector全家桶
后端
goodlook012317 小时前
监控平台搭建-日志-springboot直接推送loki篇(九)
java·spring boot·后端·grafana
老土豆豆豆17 小时前
你们Agent如何实现Code-Execution的?或许Agent-Sandbox也是你们需要的
后端
程序员爱钓鱼17 小时前
Node.js 编程实战:测试与调试 —— Mocha / Jest / Supertest 使用指南
前端·后端·node.js