Redis 在Springboot 中反序列化 LocalDateTime 时报错
该问题就是jackson2无法反序列化LocalDateTime的问题
在redisconfig增加om.registerModule(new JavaTimeModule());
@Configuration
public class RedisConfig {
/**
* redisTemplate相关配置
* @param redisConnectionFactory redis链接工厂
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
// 配置redisTemplate
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
StringRedisSerializer stringSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = serializer();
// key序列化
redisTemplate.setKeySerializer(stringSerializer);
// value序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// Hash key序列化
redisTemplate.setHashKeySerializer(stringSerializer);
// Hash value序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
/**
* 配置Jackson2JsonRedisSerializer序列化策略
*/
private Jackson2JsonRedisSerializer<Object> serializer() {
// 设置序列化
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
// 设置在反序列化时忽略在JSON字符串中存在,而在Java中不存在的属性
om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 解决jackson2无法反序列化LocalDateTime的问题
om.registerModule(new JavaTimeModule());
om.activateDefaultTyping(om.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
// 不存在的字段,不被序列化
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jackson2JsonRedisSerializer.setObjectMapper(om);
return jackson2JsonRedisSerializer;
}
}