2026/4/18 7:32:52
网站建设
项目流程
网站关键词优化的步骤和过程,请问聊城做网站,南城网络公司,泰兴网站建设公司Jackson日期时间配置说明问题描述在使用Java 8的LocalDateTime、LocalDate、LocalTime等时间类型时#xff0c;Jackson默认不支持序列化和反序列化#xff0c;会抛出以下异常#xff1a;InvalidDefinitionException: Java 8 date/time type java.time解决方案…Jackson日期时间配置说明问题描述在使用Java 8的LocalDateTime、LocalDate、LocalTime等时间类型时Jackson默认不支持序列化和反序列化会抛出以下异常InvalidDefinitionException: Java 8 date/time type java.time解决方案已创建JacksonConfig配置类来解决此问题。配置文件位置JacksonConfig.javaimport com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; Configuration public class JacksonConfig { /** * 日期时间格式 */ private static final String DATE_TIME_PATTERN yyyy-MM-dd HH:mm:ss; private static final String DATE_PATTERN yyyy-MM-dd; private static final String TIME_PATTERN HH:mm:ss; Bean Primary public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper builder.createXmlMapper(false).build(); // 注册JavaTimeModule支持Java 8时间类型 JavaTimeModule javaTimeModule new JavaTimeModule(); // LocalDateTime序列化和反序列化 javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN))); // LocalDate序列化和反序列化 javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_PATTERN))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_PATTERN))); // LocalTime序列化和反序列化 javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_PATTERN))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_PATTERN))); objectMapper.registerModule(javaTimeModule); // 配置序列化特性 // 禁用将日期序列化为时间戳 objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // 禁用将日期作为时间戳写入 objectMapper.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS); // 配置反序列化特性 // 忽略未知属性 objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // 允许空对象 objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); return objectMapper; } }配置内容注册JavaTimeModule模块支持Java 8时间类型的序列化和反序列化配置日期时间格式LocalDateTime:yyyy-MM-dd HH:mm:ssLocalDate:yyyy-MM-ddLocalTime:HH:mm:ss其他配置禁用将日期序列化为时间戳忽略未知属性允许空对象使用示例实体类定义Data public class BaseEntity { private Long id; private LocalDateTime createTime; // 自动格式化为 yyyy-MM-dd HH:mm:ss private LocalDateTime updateTime; // 自动格式化为 yyyy-MM-dd HH:mm:ss }API返回示例{ code: 200, success: true, data: { id: 1, username: admin, createTime: 2025-01-15 10:30:00, updateTime: 2025-01-15 10:30:00 } }API请求示例{ username: test, realName: 测试用户, createTime: 2025-01-15 10:30:00 }注意事项全局配置所有的LocalDateTime、LocalDate、LocalTime字段都会自动应用配置的格式不需要在每个字段上添加JsonFormat注解自定义格式如果某个字段需要特殊格式可以使用JsonFormat注解覆盖全局配置JsonFormat(pattern yyyy/MM/dd) private LocalDate specialDate;时区问题当前配置使用系统默认时区如需指定时区可以在JsonFormat中添加timezone属性兼容性配置已添加到Spring容器中自动应用于所有HTTP请求和响应也适用于手动使用ObjectMapper进行序列化和反序列化相关依赖dependency groupIdcom.fasterxml.jackson.datatype/groupId artifactIdjackson-datatype-jsr310/artifactId /dependency此依赖已在pom.xml中配置Spring Boot会自动管理版本。