出现错误:无法写入 JSON:默认情况下不支持 Java 8 日期/时间类型 `java.time.LocalDateTime`

问题描述 投票:0回答:1

我在尝试将 jsonObject 保存到 redis 时收到此错误: 无法写入 JSON:默认情况下不支持 Java 8 日期/时间类型

java.time.LocalDateTime
:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-jsr310”以启用处理。

作为解决方案,我已将此模块添加到我的 pom.xml 中。 xml 并使用对象映射器添加了模块,但我仍然收到此错误。

spring-boot java-8 jackson-modules
1个回答
0
投票

如果从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”,我的情况就解决了。

© www.soinside.com 2019 - 2024. All rights reserved.