redis 序列化

可避免日期 对象问题出现

     /**
        * redis 配置
        * @param redisConnectionFactory
        * @return
        */
       @Bean //redisTemplate注入到Spring容器
       public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
              RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
              RedisSerializer<?> redisSerializer = new StringRedisSerializer();
              var jackson2JsonRedisSerializer = jackson2JsonRedisSerializer();
              redisTemplate.setConnectionFactory(redisConnectionFactory);
              //key序列化
              redisTemplate.setKeySerializer(redisSerializer);
              //value hashmap序列化
              redisTemplate.setHashKeySerializer(redisSerializer);
              //value序列化
              redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
              //key hashmap序列化
              redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
              return redisTemplate;
       }
       /**
        * 缓存
        */
       @Bean
       public CacheManager cacheManager(RedisConnectionFactory factory) {
              RedisSerializer<String> redisSerializer = new StringRedisSerializer();
              var jsonRedisSerializer = jackson2JsonRedisSerializer();
              // 配置序列化
              RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
              RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jsonRedisSerializer)).entryTtl(Duration.ofMinutes(30));
              return RedisCacheManager.builder(factory).cacheDefaults(redisCacheConfiguration).build();
       }
       /**
        * 通过自定义配置构建Redis的Json序列化器
        */
       private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
              Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
              ObjectMapper objectMapper = new ObjectMapper();
              objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
              objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
              objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
              objectMapper.registerModule(new JavaTimeModule());
              objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
              objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
              objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);        // 此项必须配置,否则会报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);        return jackson2JsonRedisSerializer;    }
              jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
              return jackson2JsonRedisSerializer;
       }
posted @ 2023-02-15 11:58  wczhw  阅读(58)  评论(0编辑  收藏  举报