Spring-data-redis : Facing Null pointer Exception
Published: 2021-08-03 14:36:28

Unable to understand why I'm getting null when trying to access data from Map. data present in Redis and same flow to a java application, when I print the map I can see data in the map but on access through null

Code is below 
Service Layer
     @Cacheable(value = "DISCOUNT_COMPONENTS", unless = "#result == null")
        @Override
        public Map<Integer, String> getDiscountComponents(
                String discountComponentsKey) {
             List<DiscountComponent> discountComponentsEntity = discountComponentRepository
                    .findAll();
             Map<Integer, String> discountComponentsMap = new HashMap<Integer, String>();
            if (!CollectionUtils.isEmpty(discountComponentsEntity)) {
                for (final DiscountComponent discountComponentEntity : discountComponentsEntity) {
                    discountComponentsMap.put(
                            discountComponentEntity.getDiscountComponentId(),
                            discountComponentEntity.getDiscountComponentName());
                }
            }
            return discountComponentsMap;
        }
    
    Calling from Controller layer
    
     @RequestMapping(value = "/from-cache-map_2/{key}/{key2}", method = RequestMethod.GET)
        public void test(@PathVariable Integer key, @PathVariable Integer key2) {
            Map<Integer, String> discountComponentMap =  discountCacheService
                    .getDiscountComponents(PricingBusinessConstants.DISCOUNT_COMPONENTS_KEY);
            LOGGER.info("**************discountComponentMap **********" + discountComponentMap);
            // Getting cached categories information
            LOGGER.info("Data in Map : "+discountComponentMap.get(key));
            LOGGER.info("Key Contains check "+discountComponentMap.containsKey(key));
            LOGGER.info("Key Contains check "+discountComponentMap.containsKey(1));
    
    }
    
    Logs
    **************discountComponentMap **********{1=CLASS, 2=TEMPLATE, 3=CATEGORY}
    Data in Map : null
    Key Contains check false
    Key Contains check false


Redis Configuration : 

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisSerializer<Object> serializer = redisSerializer();
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(serializer);
        template.setValueSerializer(serializer);
        template.setHashKeySerializer(serializer);
        template.setHashValueSerializer(serializer);
        template.afterPropertiesSet();
        return template;
    }

    @Bean
    public RedisSerializer<Object> redisSerializer() {
        //Create JSON serializer
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        serializer.setObjectMapper(objectMapper);
        return serializer;
    }

    @Bean
    @Primary
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {

       /* RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .disableCachingNullValues()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.json()));
        redisCacheConfiguration.usePrefix();*/

        /*RedisCacheManager cacheManager = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
                .build();*/
        //cacheManager.setTransactionAware(true);

        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate(redisConnectionFactory));
        redisCacheManager.setTransactionAware(true);
        redisCacheManager.setCachePrefix(new DefaultRedisCachePrefix());
        redisCacheManager.setUsePrefix(true);
        redisCacheManager.setCachePrefix(new DefaultRedisCachePrefix("::"));
        redisCacheManager.setExpires(setKeyToTimeToLiveMap());
        return redisCacheManager;
    }