在从Redis获取带有LocalDateTime类型属性的对象时,产生序列化和反序列化问题解决办法 方式一:实体类上指定LocalDateTime的序列化器和反序列化器
1 @JsonDeserialize(using = LocalDateTimeDeserializer.class) //反序列化 2 @JsonSerialize(using = LocalDateTimeSerializer.class) //序列化 3 private LocalDateTime
方式二:在Redis的配置类中指明序列化的方式
1 @Configuration 2 public class RedisConfig { 3 private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 4 private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 5 private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss"); 6 7 @Bean 8 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { 9 RedisTemplate<String, Object> template = new RedisTemplate<>(); 10 template.setConnectionFactory(redisConnectionFactory); 11 12 /** 13 * JSON序列化 14 */ 15 Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class); 16 ObjectMapper mapper = new ObjectMapper(); 17 //取消时间转换格式,默认是时间戳,同时需要设置要表现的时间格式 18 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); 19 mapper.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false); 20 mapper.setDateFormat(new SimpleDateFormat("yyy-MM-dd HH:mm:ss")); 21 22 //默认序列化没有实现,反序列化有实现 23 JavaTimeModule javaTimeModule = new JavaTimeModule(); 24 25 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)); 26 27 mapper.registerModule(javaTimeModule); 28 //设置时区 29 mapper.setTimeZone(TimeZone.getDefault()); 30 //设置格式化输出// MAPPER.enable(SerializationFeature.INDENT_OUTPUT); 31 //设置格式化输出 32 mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); 33 mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 34 serializer.setObjectMapper(mapper); 35// StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); 36 template.setKeySerializer(serializer); 37 template.setHashKeySerializer(serializer); 38 template.setValueSerializer(serializer); 39 template.setHashValueSerializer(serializer); 40 return template; 41 }}
好买网 www.goodmai.com IT技术交易平台