RedisTemplate未指定泛型引发警告,如何兼容多类型存储?
解决RedisTemplate泛型警告的几种方案
1. 声明带Object泛型的RedisTemplate
Redis的key通常为String类型,value用Object泛型可以保留存储任意类型的灵活性,同时消除原始类型警告:
private final RedisTemplate<String, Object> redisTemplate; @Autowired public SomeController(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; }
使用时支持存入不同类型的value,取值时可结合TypeReference实现类型安全的读取:
// 存入List类型数据 redisTemplate.opsForValue().set("list_key", dtoList, 60, TimeUnit.MINUTES); // 存入单个对象 redisTemplate.opsForValue().set("obj_key", singleDto, 60, TimeUnit.MINUTES); // 类型安全取值 List<YourDto> result = redisTemplate.opsForValue().get("list_key", new TypeReference<List<YourDto>>() {});
2. 局部抑制警告
如果不想修改RedisTemplate的全局声明,可在出现警告的方法或代码块上添加注解,精准抑制特定警告:
@SuppressWarnings({"rawtypes", "unchecked"}) public void saveListData(String key, List<?> dtoList) { redisTemplate.opsForValue().set(key, dtoList, 60, TimeUnit.MINUTES); }
这种方式适合临时处理个别警告,不会影响其他代码的类型检查。
3. 自定义带泛型的RedisTemplate Bean(推荐)
在配置类中定义泛型为<String, Object>的RedisTemplate Bean,统一项目中的RedisTemplate实例,同时配置序列化器避免默认JDK序列化的问题:
@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); // 配置JSON序列化器,解决对象序列化兼容性问题 Jackson2JsonRedisSerializer<Object> valueSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); valueSerializer.setObjectMapper(objectMapper); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(valueSerializer); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(valueSerializer); template.afterPropertiesSet(); return template; } }
之后注入时直接使用RedisTemplate<String, Object>,既消除所有泛型警告,又保证序列化的通用性。
内容的提问来源于stack exchange,提问作者zxcisnoias
相关产品推荐
相关产品推荐

