Java Spring中带有json:map键序列化的Redis缓存

Java Spring中带有json:map键序列化的Redis缓存,java,json,spring-mvc,caching,redis,Java,Json,Spring Mvc,Caching,Redis,希望你能帮我 我使用SpringBoot1.3.0M5和Redis作为缓存实现,通过注释 @Bean // redis template used for caching public RedisTemplate<String, Object> cacheRedisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate(); redisTempl

希望你能帮我

我使用SpringBoot1.3.0M5和Redis作为缓存实现,通过注释

    @Bean
// redis template used for caching
public RedisTemplate<String, Object> cacheRedisTemplate()    {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer());
    redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
    redisTemplate.setConnectionFactory(connectionFactory());
    return redisTemplate;
}

@Bean
public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
    final Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    final ObjectMapper objectMapper = Jackson2ObjectMapperBuilder
            .json()
            .build();
    objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    return jackson2JsonRedisSerializer;
}
这在第一次工作时是有效的,但在redis缓存它之后,整数键被序列化为字符串,然后反序列化为字符串,因此它不会再次工作,因为键将是“1”而不是1

我尝试过使用@JsonDeserialize(keyAs=Integer.class),也尝试过注册objectMapper模块,但都不起作用


非常感谢。

嗨,你解决了吗?嗨,你解决了吗?
 @Cacheable(value = "forecasts", key = "'forecasts'", cacheManager = "forecastCacheManager")
public Map<Integer, Forecast> retrieveForecasts() {
  < retrieve data >

  return stream.collect(Collectors
    .<Forecast, Integer, Forecast>toMap(o -> o.getGame(), o -> o));
 }
forecastMap.get(1)