乐趣区

关于redis:解决Redis序列化Java8的LocalDateTime问题

在从 Redis 获取带有 LocalDateTime 类型属性的对象时,产生序列化和反序列化问题解决办法
形式一:实体类上指定 LocalDateTime 的序列化器和反序列化器

  @JsonDeserialize(using = LocalDateTimeDeserializer.class)  // 反序列化
  @JsonSerialize(using = LocalDateTimeSerializer.class)  // 序列化
  private LocalDateTime birthday;

形式二:在 Redis 的配置类中指明序列化的形式

  @Configuration
    public class RedisConfig {private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        /**
         * JSON 序列化
         */
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        // 勾销工夫转换格局,默认是工夫戳,同时须要设置要体现的工夫格局
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
        mapper.setDateFormat(new SimpleDateFormat("yyy-MM-dd HH:mm:ss"));

        // 默认序列化没有实现,反序列化有实现
        JavaTimeModule javaTimeModule = new JavaTimeModule();

        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATE_TIME_FORMATTER));
//        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATE_FORMATTER));
//        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(TIME_FORMATTER));

        mapper.registerModule(javaTimeModule);
        // 设置时区
        mapper.setTimeZone(TimeZone.getDefault());
        // 设置格式化输入
//        MAPPER.enable(SerializationFeature.INDENT_OUTPUT);
        // 设置格式化输入
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        serializer.setObjectMapper(mapper);

//        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(serializer);
        template.setHashKeySerializer(serializer);
        template.setValueSerializer(serializer);
        template.setHashValueSerializer(serializer);
        return template;
    }
}

Good Mai http://www.goodmai.com/

退出移动版