【发布时间】:2020-04-28 12:49:00
【问题描述】:
我的控制器使用 redis 模板从 redis 获取和设置数据
val redisTemplate: RedisTemplate<String, Game>
模板是使用 bean 注入的
@Bean
fun <T> redisTemplate(builder: RestTemplateBuilder): RedisTemplate<String, T> {
val serializer = Jackson2JsonRedisSerializer(Game::class.java)
serializer.setObjectMapper(objectMapper)
val template = RedisTemplate<String, T>()
template.setConnectionFactory(connectionFactory())
template.setDefaultSerializer(serializer)
return template
}
这可行,但是我必须明确说明要序列化的顶级类,因此返回的模板仅适用于 RedisTemplate<String, Game> 而不适用于 RedisTemplate<String, T>。
我已尝试将序列化程序实例更改为以下内容,但无法编译。
val serializer = Jackson2JsonRedisSerializer(T::class.java)
我已尝试将其更改为以下
val serializer = Jackson2JsonRedisSerializer(Object::class.java)
这可以编译,但是从 redis 读取时出现异常
java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class com.noicesoftware.redis.model.Game (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.noicesoftware.redis.model.Game is in unnamed module of loader 'app')
我曾尝试使用 GenericJackson2JsonRedisSerializer,但我得到了上述行为和异常。
val serializer = GenericJackson2JsonRedisSerializer(objectMapper)
任何想法将不胜感激。完整代码可在此处获得; https://github.com/DangerousDarlow/springboot-redis
【问题讨论】:
标签: spring-boot kotlin redis jackson spring-data-redis