Quantcast
Channel: Active questions tagged redis+java - Stack Overflow
Viewing all articles
Browse latest Browse all 2204

How to use GenericJackson2JsonRedisSerializer

$
0
0

I am using Spring Data Redis in order to cache some data using @Cacheable. I have multiple types of objects that need to be cached and I need the data from Redis to be in JSON format. I know that, by default, the serializer used is JdkSerializationRedisSerializer, but with is the cached data is not human readable.

I order to save the data in JSON format I wanted to use GenericJackson2JsonRedisSerializer and I've created a custom ObjectMapper too:

  public RedisTemplate<Object, Object> redisTemplate (RedisConnectionFactory cf) {    ObjectMapper objectMapper = new Jackson2ObjectMapperBuilder().failOnEmptyBeans(false)        .failOnUnknownProperties(false)        .indentOutput(false)        .serializationInclusion(JsonInclude.Include.NON_NULL)        .modules(            // Optional            new Jdk8Module(),            // Dates/Times            new JavaTimeModule()        )        .featuresToDisable(            SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,            DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS,            SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS        ).build();    GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);    RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();    redisTemplate.setConnectionFactory(cf);    redisTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);    redisTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer);    redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);    redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);    return redisTemplate;

Using this RedisTemplate doesn't work and I always get back this error:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to <some class>

As I understood, when deserializing, Jackson doesn't know the type of the specific object since it's Object and creates a LinkedHashMap to hold the data. Maybe I am wrong with this, but how can I achieve saving the cached data as JSON for multiple types of objects with @Cacheble?


Viewing all articles
Browse latest Browse all 2204

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>