前言
一个后台项目,使用spring cache,将数据序列化到redis没问题,回读的时候反序列化失败
错误1
反序列化LocalDateTime失败,原因是LocalDateTime没有constructor
解决办法
Jackson2JsonRedisSerializer<Object> j2jrs = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
// 解决jackson2无法反序列化LocalDateTime的问题
om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
om.registerModule(new JavaTimeModule());
j2jrs.setObjectMapper(om);
复制代码
错误2
LinkedHashMap无法转换为指定对象
解决办法:设置defaultType
//将类名称序列化到json串中,去掉会导致得出来的的是LinkedHashMap对象,直接转换实体对象会失败
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
复制代码
需要注意的是原来的enableDefaultTyping()方法已过期
近期评论