在 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());
        };
    }
}
相关推荐
noravinsc41 分钟前
django中用 InforSuite RDS 替代memcache
后端·python·django
喝醉的小喵1 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
kaixin_learn_qt_ing2 小时前
Golang
开发语言·后端·golang
源码云商2 小时前
【带文档】网上点餐系统 springboot + vue 全栈项目实战(源码+数据库+万字说明文档)
数据库·vue.js·spring boot
炒空心菜菜2 小时前
MapReduce 实现 WordCount
java·开发语言·ide·后端·spark·eclipse·mapreduce
zy happy3 小时前
搭建运行若依微服务版本ruoyi-cloud最新教程
java·spring boot·spring cloud·微服务·ruoyi
wowocpp5 小时前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go5 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
freellf5 小时前
go语言学习进阶
后端·学习·golang
独泪了无痕5 小时前
MongoTemplate 基础使用帮助手册
spring boot·mongodb