我在尝试将 jsonObject 保存到 redis 时收到此错误: 无法写入 JSON:默认情况下不支持 Java 8 日期/时间类型
java.time.LocalDateTime
:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-jsr310”以启用处理。
作为解决方案,我已将此模块添加到我的 pom.xml 中。 xml 并使用对象映射器添加了模块,但我仍然收到此错误。
如果从redis缓存获取LocalDate或LocalDatetime时无法反序列化。这是由 jackson-datatype-jsr310 引起的。但是,即使包含此模块,您仍然会收到警告。
就我而言: 找到我的 redis 缓存配置。我会找到这个默认缓存配置。
private RedisCacheConfiguration defaultCacheConfig() {
return RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.entryTtl(Duration.ofSeconds(120)); // default
}
并且 GenericJackson2JsonRedisSerializer() 使用了 ObjectMapper。
所以我像这样改变了我的代码:
private RedisCacheConfiguration defaultCacheConfig() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer(objectMapper)))
.entryTtl(Duration.ofSeconds(120)); // default
}
所以这个 JavaTimeModule() 有“jackson-datatype-jsr310”,我的情况就解决了。