Мне нужно добавить кэш Redis в метод, который возвращает список значений.
Я использую этот учебник в качестве основы https://www.baeldung.com/spring-data-redis-tutorial
исключение показывает это
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')
at
@Cacheable(cacheNames = "customerDetailByParam", key="{#searchParams.toString()}")
@Retryable(value = { HttpServerErrorException.class }, maxAttempts = RETRY_ATTEMPTS, backoff = @Backoff(delay = 5000))
public List<ObjectResponse> searchCustomerDetailByParam(MultiValueMap<String, String> searchParams)
Я искал некоторые решения, однако ни одно из них не работает.
CacheConfig. java
@Configuration
@EnableCaching
@ConditionalOnMissingBean(value = CacheManager.class)
@Slf4j
public class CacheConfig {
@Bean
JedisConnectionFactory jedisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
//redisStandaloneConfiguration.setPassword(RedisPassword.of("yourRedisPasswordIfAny"));
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(jedisConnectionFactory());
template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
template.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer(getClass().getClassLoader());
template.setDefaultSerializer(serializer);
return template;
}
}
ObjectResponse. java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ObjectResponse implements Serializable {
@JsonProperty("id")
private String customerId;
@JsonProperty("name")
@JsonAlias("full_name")
private String customerName;
private String document;
private String email;
}