SpringBoot中Redis解决LocalDateTime序列化与反序列化不一致问题

 前言

        在SpringBoot应用中,数据的序列化和反序列化是关键环节。然而,对于LocalDateTime类型的数据,有时会遇到序列化与反序列化不一致的问题。这主要是由于不同的时区或格式差异所导致。为了解决这一问题,我们可以借助Redis的强大功能。Redis提供了日期和时间的序列化和反序列化方法,确保了在不同环境下的数据一致性。通过配置合理的序列化策略,我们能够确保LocalDateTime数据在SpringBoot应用中的准确处理。这样,无论在存储、传输还是处理数据时,都能够确保数据的一致性和准确性。

一、Redis配置类

        只需配置以下配置即可解决LocalDateTime序列化与反序列化不一致问题

@Configuration
public class RedisConfig {

	@Bean
	public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
		RedisTemplate redisTemplate = new RedisTemplate<>();
		redisTemplate.setConnectionFactory(factory);
		Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
		ObjectMapper mapper = new ObjectMapper();
		mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
		jackson2JsonRedisSerializer.setObjectMapper(mapper);
		StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
		redisTemplate.setKeySerializer(stringRedisSerializer);
		redisTemplate.setHashKeySerializer(stringRedisSerializer);
		redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
		redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
		redisTemplate.afterPropertiesSet();

		//下面代码解决LocalDateTime序列化与反序列化不一致问题
		Jackson2JsonRedisSerializer j2jrs = new Jackson2JsonRedisSerializer<>(Object.class);
		ObjectMapper om = new ObjectMapper();
		om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		// 解决jackson2无法反序列化LocalDateTime的问题
		om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
		om.registerModule(new JavaTimeModule());om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);j2jrs.setObjectMapper(om);
		// 序列化 value 时使用此序列化方法
		redisTemplate.setValueSerializer(j2jrs);
		redisTemplate.setHashValueSerializer(j2jrs);
		return redisTemplate;
	}
}
 
  

你可能感兴趣的:(redis,java,spring,boot)