在 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());
        };
    }
}
相关推荐
chenyuhao202436 分钟前
vector深度求索(上)实用篇
开发语言·数据结构·c++·后端·算法·类和对象
程序新视界1 小时前
MySQL中的数据去重,该用DISTINCT还是GROUP BY?
数据库·后端·mysql
豌豆花下猫1 小时前
Python 潮流周刊#121:工程师如何做出高效决策?
后端·python·ai
97zz2 小时前
实战排查:Java 解析 Excel 大型 导致内存溢出问题的完整解决过程
java·开发语言·spring boot·excel
懒惰蜗牛3 小时前
Day24 | Java泛型通配符与边界解析
java·后端·java-ee
Eoch773 小时前
从买菜到秒杀:Redis为什么能让你的网站快如闪电?
java·后端
我不是混子3 小时前
奇葩面试题:线程调用两次start方法会怎样?
java·后端
摸鱼总工4 小时前
为什么读源码总迷路?有破解办法吗
后端
Q_Q5110082854 小时前
python+springboot+uniapp基于微信小程序的停车场管理系统 弹窗提示和车牌识别
vue.js·spring boot·python·django·flask·uni-app·node.js
仙俊红4 小时前
深入理解 ThreadLocal —— 在 Spring Boot 中的应用与原理
java·spring boot·后端