首页 > 解决方案 > Spring data redis 库无法转换 Joda DateTime 对象

问题描述

我们如何使用 spring redis 模板存储和检索将 Joda DateTime 作为字段的数据库对象?

我尝试在 GenericJackson2JsonRedisSerializer() 方法中传递自定义对象映射器。该对象映射器在我们的应用程序中工作正常,并正确转换所有数据库对象(也具有 DateTime 字段)。但是在 GenericJackson2JsonRedisSerializer() 中使用相同的映射器,它将值存储为 LinkedHashMap 而不是数据库对象类的类型。如何存储和检索与数据库对象类具有相同类型的对象?下面是没有传递对象映射器的代码,导致以下结果。

@Bean(name = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(getJedisConnectionFactory());
        template.setKeySerializer( new StringRedisSerializer());
        template.setHashValueSerializer( new GenericJackson2JsonRedisSerializer());
        template.setValueSerializer( new GenericJackson2JsonRedisSerializer());
        return template;
    }

无法读取 JSON:无法识别的字段 \"era\"(类 org.joda.time.DateTime),未标记为可忽略(2 个已知属性:\"chronology\"、\"millis\"])\n 在 [Source :(通过引用链:services->java.util.ArrayList[0]->models[\"dateAdd\"]->org.joda.time.DateTime[\"era\"]); 嵌套异常是 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field \"era\" (class org.joda.time.DateTime),未标记为可忽略(2 个已知属性:\"chronology\", \" millis\"])\n (通过引用链:->java.util.ArrayList[0]->models[\"dateAdd\"]->org.joda.time.DateTime[\"era\"])"

标签: springredis

解决方案


推荐阅读