SpringBoot 整合 Redis 时间日期类转换出错
报错信息
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through
reference chain: java.util.ArrayList[0]->com.zym.entity.Banner["gmtCreate"])
原因:将集合等数据存入 redis 需要将其序列化,jackson 不支持数据中的 LocalDateTime 类型的属性
解决办法:
引入额外的依赖 com.fasterxml.jackson.datatype:jackson-datatype-jsr310
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.13.0</version>
</dependency>
然后在对应的使用了 LocalDateTime 的实体类属性上添加序列化和反序列化注解,并指定对应的序列化类
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
@TableName("edu_teacher")
@ApiModel(value = "Teacher对象", description = "讲师")
public class Teacher implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("创建时间")
@TableField(fill = FieldFill.INSERT)
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
private LocalDateTime gmtCreate;
@ApiModelProperty("更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
private LocalDateTime gmtModified;
public LocalDateTime getGmtCreate() {
return gmtCreate;
}
public void setGmtCreate(LocalDateTime gmtCreate) {
this.gmtCreate = gmtCreate;
}
public LocalDateTime getGmtModified() {
return gmtModified;
}
public void setGmtModified(LocalDateTime gmtModified) {
this.gmtModified = gmtModified;
}
@Override
public String toString() {
return "Teacher{" +
", gmtCreate=" + gmtCreate +
", gmtModified=" + gmtModified +
"}";
}
}