Java Spring中带有json:map键序列化的Redis缓存
希望你能帮我 我使用SpringBoot1.3.0M5和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
@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)