✅ 解决 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());
};
}
}