likes
comments
collection
share

redis使用jackson反序列化的坑

作者站长头像
站长
· 阅读数 27

前言

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

转载自:https://juejin.cn/post/6915007287467737101
评论
请登录