Java8+SpringBoot2.7.7中LocalDateTime序列化失败求助
解决SpringBoot2.7.7中LocalDateTime序列化失败问题
已经引入jackson-datatype-jsr310但仍出现序列化异常,可从以下几个方向排查修复:
1. 确认依赖配置正确
SpringBoot 2.7.7默认管理Jackson版本为2.13.x,无需手动指定版本,避免依赖冲突:
<!-- pom.xml中正确引入依赖 --> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <!-- 移除手动指定的version,由SpringBoot parent自动匹配对应版本 --> </dependency>
若之前手动指定过版本,可能与SpringBoot内置Jackson版本冲突,建议删除version标签。
2. 配置Jackson全局序列化规则
通过配置类或配置文件开启Java8日期类型支持,并指定统一格式:
方式一:自定义Jackson配置类
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.time.format.DateTimeFormatter; @Configuration public class JacksonConfig { private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); // 配置LocalDateTime序列化格式 javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT))); objectMapper.registerModule(javaTimeModule); return objectMapper; } }
方式二:通过application.yml配置
spring: jackson: date-format: yyyy-MM-dd HH:mm:ss serialization: # 关闭时间戳输出,使用格式化后的字符串 write-dates-as-timestamps: false time-zone: GMT+8
注意write-dates-as-timestamps需设为false,避免将LocalDateTime转为时间戳,同时指定时区防止日期偏移。
3. 检查实体类字段注解
若需对单个字段自定义格式,可在LocalDateTime字段上添加@JsonFormat注解:
import com.fasterxml.jackson.annotation.JsonFormat; import java.time.LocalDateTime; public class YourEntity { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; // getter、setter方法 }
4. 排查自定义Jackson配置冲突
若项目中存在其他自定义ObjectMapper配置类,可能覆盖了默认的JavaTimeModule注册。确保所有自定义配置都显式注册JavaTimeModule,或使用@Primary注解指定优先使用的ObjectMapper Bean。
5. 检查PageUtils等工具类处理逻辑
如果返回结果是通过PageUtils封装的分页数据,需确认工具类在处理数据时,未对LocalDateTime字段做额外序列化/反序列化操作,导致Jackson规则未生效。
内容的提问来源于stack exchange,提问作者EasonHu
相关产品推荐
相关产品推荐

