1. 现象
spring boot访问redis,取出对象时报错
报错信息:
caused by: com.fasterxml.jackson.databind.exc.unrecognizedpropertyexception: unrecognized field "headpart"
at com.fasterxml.jackson.databind.exc.unrecognizedpropertyexception.from(unrecognizedpropertyexception.java:61)
at com.fasterxml.jackson.databind.deserializationcontext.handleunknownproperty(deserializationcontext.java:823)
at com.fasterxml.jackson.databind.deser.std.stddeserializer.handleunknownproperty(stddeserializer.java:1153)
at com.fasterxml.jackson.databind.deser.beandeserializerbase.handleunknownproperty(beandeserializerbase.java:1589)
at com.fasterxml.jackson.databind.deser.beandeserializerbase.handleunknownvanilla(beandeserializerbase.java:1567)
at com.fasterxml.jackson.databind.deser.beandeserializer.vanilladeserialize(beandeserializer.java:294)
at com.fasterxml.jackson.databind.deser.beandeserializer.deserialize(beandeserializer.java:151)
at com.fasterxml.jackson.databind.jsontype.impl.asarraytypedeserializer._deserialize(asarraytypedeserializer.java:116)
at com.fasterxml.jackson.databind.jsontype.impl.asarraytypedeserializer.deserializetypedfromany(asarraytypedeserializer.java:71)
at com.fasterxml.jackson.databind.deser.std.untypedobjectdeserializer$vanilla.deserializewithtype(untypedobjectdeserializer.java:712)
at com.fasterxml.jackson.databind.deser.impl.typewrappeddeserializer.deserialize(typewrappeddeserializer.java:68)
at com.fasterxml.jackson.databind.objectmapper._readmapandclose(objectmapper.java:4013)
at com.fasterxml.jackson.databind.objectmapper.readvalue(objectmapper.java:3129)
at org.springframework.data.redis.serializer.jackson2jsonredisserializer.deserialize(jackson2jsonredisserializer.java:73)
... 39 common frames omitted
2. 排查
最开始以为忘了写implements serializable
,检查后不是该问题。
然后以为是不是忘了写get set方法,检查后也不是。
最后发现了细节提示:
unrecognized field "headpart"
也就是说识别不了属性headpart
恍然大悟,原来我写了一个方法getheadpart,但是并没有headpart属性
3. 解决
将getheadpart改为makeheadpart即可…
像jackson这种序列化工具是依赖反射来识别方法属性的,get开头的方法容易误导序列化工具。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论