feat(jackson): 使用Jackson2ObjectMapperBuilder配置ObjectMapper
- 使用Jackson2ObjectMapperBuilder构建ObjectMapper以确保与Spring Boot完全兼容 - 配置JavaTimeModule以支持Java 8时间类型 - 设置时区为GMT+8- 禁用将日期写为时间戳 - 忽略未知属性的反序列化错误 - 在application.yml中显式启用JavaTimeModule模块
This commit is contained in:
@@ -9,9 +9,11 @@ import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jackson配置类 - 强制配置版本
|
* Jackson配置类 - 强制配置版本
|
||||||
@@ -29,12 +31,13 @@ public class JacksonConfig {
|
|||||||
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 强制配置ObjectMapper,确保JavaTimeModule被正确注册
|
* 使用Jackson2ObjectMapperBuilder构建ObjectMapper
|
||||||
|
* 确保与Spring Boot完全兼容
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
@Primary
|
@Primary
|
||||||
public ObjectMapper objectMapper() {
|
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = builder.build();
|
||||||
|
|
||||||
// 创建并配置JavaTimeModule
|
// 创建并配置JavaTimeModule
|
||||||
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
||||||
@@ -49,9 +52,12 @@ public class JacksonConfig {
|
|||||||
|
|
||||||
// 禁用将日期写为时间戳
|
// 禁用将日期写为时间戳
|
||||||
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||||
|
|
||||||
// 忽略未知属性
|
// 忽略未知属性
|
||||||
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
|
||||||
|
// 设置时区
|
||||||
|
mapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
|
||||||
|
|
||||||
return mapper;
|
return mapper;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ spring:
|
|||||||
write-dates-as-timestamps: false
|
write-dates-as-timestamps: false
|
||||||
deserialization:
|
deserialization:
|
||||||
fail-on-unknown-properties: false
|
fail-on-unknown-properties: false
|
||||||
|
# 确保启用Java 8时间支持
|
||||||
|
modules:
|
||||||
|
- com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
|
||||||
|
|
||||||
# 连接池配置
|
# 连接池配置
|
||||||
datasource:
|
datasource:
|
||||||
|
|||||||
Reference in New Issue
Block a user