redis使用jackson反序列化的坑

前言

一个后台项目,使用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()方法已过期