配置redisTemplate自定义序列化,无法反序列化Map的key为Integer

我的spring boot是
这是我的配置:

@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate redisTemplate = new RedisTemplate();
    redisTemplate.setConnectionFactory(redisConnectionFactory);

    Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    objectMapper.registerModule(new JodaModule());
    jsonRedisSerializer.setObjectMapper(objectMapper);

    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(jsonRedisSerializer);
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    redisTemplate.setHashValueSerializer(jsonRedisSerializer);

    return redisTemplate;
}

无论我使用上面的配置,还是改为

redisTemplate.setHashKeySerializer(jsonRedisSerializer);

在我存value为Map<Integer, Object>类型数据到redis时,再从redis取出来就变成Map<String, Object>类型
如果你见过这个问题,或者有什么办法解决,请告诉我,谢谢!

阅读 3.7k
1 个回答

image.png

你这改的是 Value 的序列化器,Key 不就是 String 么。

要么你取出来以后自己在代码层再转换一次(推荐);要么自己写个序列化器改 Key。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题