Пользовательская конфигурация RedisConfigurationManager и RedisTemplate для обработки пользовательских классов, расширяющих другие классы - PullRequest
0 голосов
/ 24 января 2019

Не уверен, какой сериализатор redis использовать.

Я пытался использовать сериализатор GenericJackson2JsonRedisSerializer и Jackson2JsonRedisSerializer для кэширования типов классов, таких как PagedResources>.Я могу кешировать их, используя Jackson2JsonRedisSerializer, но получая ошибки при извлечении из кеша.Я попытался установить ProductInfo.class, Resource.class и PagedResources.class в Jackson2JsonRedisSerializer, но ни один из них не работает.

@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.Resource

@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 = new Jackson2JsonRedisS>учебный класс);

Я получаю ошибку неопознаваемых полей.

Когда я пытаюсь выполнить redisTemplate.setValueSerializer (new GenericJackson2JsonRedisSerializer ());redisTemplate.setHashValueSerializer (new GenericJackson2JsonRedisSerializer ());

Я получаю сообщение об ошибке при вызове службы продукта: не удается записать JSON: свойство Unwrapped требует использования информации типа: невозможно сериализовать без отключения SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS (через цепочку ссылок:org.springframework.hateoas.PagedResources [ "содержание"] -> java.util.Collections $ UnmodifiableCollection [0] -> org.springframework.hateoas.Resource [ "содержание"]);

...