错误背景
在整合 security 框架的时候,讲一个 UserLogin 类使用 GenericJackson2JsonRedisSerializer 序列化的方式存入到 redis ,反序列化的时候报错: org.springframework.data.redis.serializer.SerializationException: could not read Js0N:Unrecognized field "enbled" (class com.yuan.entity.Loginuser), not marked as ionorable (2 known properties: "user", "permissions" )
错误解析
这个报错信息是说没有 Loginuser 和 permissions 这两个属性可以映射,这就很奇怪了,因为我的类中是有这两个属性:
最终原因是说我这两个属性并没有对应的 set 方法,在反序列的时候,无法将数据写入到该类中而报错,这样只要我给他们加入get、set方法就能解决了?这种方法在这种场景是行不通的。
解决办法
既然用到 jackson 序列化方式,那就用jackson的办法处理:
1、在 UserLogin 类中加入 @JsonIgnoreProperties(ignoreUnknown = true) 注解,屏蔽掉无法解析的字段。
2、redisconfig 配置中添加如下配置:
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,
ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(om);