Мой контроллер использует шаблон redis для получения и установки данных из redis
val redisTemplate: RedisTemplate<String, Game>
Шаблон внедряется с использованием компонента
@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