Spring JPA @CreatedDate返回LocalDateTime格式异常问题排查
问题原因
你遇到的LocalDateTime返回数组的问题,是因为Jackson默认对Java 8日期时间类型的序列化规则导致的——它会将LocalDateTime拆分为年、月、日、时、分、秒等元素组成的数组,而非转为符合业务预期的字符串格式。
解决方案
以下是几种可行的解决方式,按推荐优先级排序:
1. 全局配置(推荐)
在application.yml中添加Jackson的日期时间序列化配置,统一处理所有Java 8时间类型:
spring: jackson: serialization: write-dates-as-timestamps: false date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 # 根据你的实际时区调整,比如UTC
同时注意你现有jpa配置存在格式错误,修正如下:
jpa: properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect show-sql: true # 修正键值对的格式写法
2. 字段级注解(局部处理)
如果只想单独处理特定时间字段,可以在实体类的对应字段上添加Jackson序列化注解:
@CreatedDate @Column(name = "create_ts", nullable = false, updatable = false) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createdDate; @LastModifiedDate @Column(name = "update_ts") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime lastModifiedDate;
3. 检查依赖(确保Java 8时间序列化支持)
Spring Boot 2.x及以上版本默认包含jackson-datatype-jsr310依赖,该依赖用于支持Java 8日期时间类型的序列化。如果是旧版本项目,需手动添加依赖:
Maven
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency>
Gradle
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
额外代码修正
你的Controller代码存在变量错误:返回时调用userProfService.getUserProfile(id).get(),但方法参数是dsid,id为未定义变量,需修正为:
return new ResponseEntity<>(userProfService.getUserProfile(dsid).get(), HttpStatus.OK);
内容的提问来源于stack exchange,提问作者Upen
相关产品推荐
相关产品推荐

