自定义RedisConfigurationManager和RedisTemplate配置以处理扩展其他类的自定义类

时间:2019-01-24 06:54:23

标签: spring-boot serialization redis jedis

不确定要使用什么Redis序列化器。

我已经尝试了GenericJackson2JsonRedisSerializer和Jackson2JsonRedisSerializer序列化器来缓存诸如PagedResources>之类的类。我可以使用Jackson2JsonRedisSerializer来缓存它们,但是在从缓存中获取它时会出错。我曾尝试在Jackson2JsonRedisSerializer中设置ProductInfo.class,Resource.class和PagedResources.class,但没有任何效果。

@Bean
public JedisConnectionFactory redisConnectionFactory() {
    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
    jedisConnectionFactory.setUsePool(true);
    return jedisConnectionFactory;
}

@Bean
public RedisSerializer<String> redisStringSerializer() {
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    return stringRedisSerializer;
}

当我尝试这样做时,我能够缓存时出错,但是尝试获取数据时出错。我得到:调用产品服务时出错:java.util.LinkedHashMap无法转换为org.springframework.hateoas。资源

@Bean(name="redisTemplate")
public RedisTemplate<String, PagedResources> redisTemplate(RedisConnectionFactory connectionFactory, RedisSerializer<String> redisSerializer) {
    RedisTemplate<String, PagedResources> redisTemplate = new RedisTemplate<String, PagedResources>();
    redisTemplate.setConnectionFactory(connectionFactory);
    redisTemplate.setKeySerializer(redisSerializer);
    redisTemplate.setHashKeySerializer(redisSerializer);

    Jackson2JsonRedisSerializer<PagedResources> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(PagedResources.class);


    redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
    redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

    return redisTemplate;
}


@Bean
@Primary
public CacheManager productsRedisCacheManager() {
    RedisCacheManager manager = new RedisCacheManager(redisTemplate(redisConnectionFactory(), redisStringSerializer()));
    return manager;
}

当我尝试     Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =新的Jackson2JsonRedisSerializer <>(ProductInfo.class);

我收到无法识别的字段错误。

当我尝试     redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());         redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

我明白了 调用产品服务时发生错误:无法编写JSON:未包装的属性需要使用类型信息:在不禁用SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS的情况下无法序列化(通过引用链:org.springframework.hateoas.PagedResources [“ content”]-> java。 util.Collections $ UnmodifiableCollection [0]-> org.springframework.hateoas.Resource [“ content”]);

0 个答案:

没有答案