项目场景:
最近在使用redis做aop缓存,在反序列化某些带有LocalDateTime类型的属性会报异常,注意这里使用的是GenericJackson2JsonRedisSerializer 作为redisTemplate的序列化执行器。
问题描述:
主要日志信息我贴在下方
大致的意思就是对于LocalDateTime这个属性缺少一个构造器。缺少构造器,看了后面的日志信息,发现createTime属性在redis中是这样存的。被封装成了key value键值对的形式。
出现了错误就得解决呀,于是一顿百度找到了解决方案。
解决方案:
1.添加依赖
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
2.在RedisConfig中添加两行代码
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
//解决LocalDateTime反序列化问题
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.registerModule(new JavaTimeModule());
jackson2JsonRedisSerializer.setObjectMapper(mapper);