使用Jackson反序列化JSON至Java对象时遭遇UnrecognizedPropertyException的问题求助
解决Jackson反序列化UnrecognizedPropertyException问题
嘿,我一眼就看出问题所在了!咱们先拆解下你的JSON结构和实体类的不匹配点:
你的JSON里,onWarning、onError、onSuccess每个字段下面还嵌套了一层alert对象,比如:
"onWarning":{"alert":{"isEnabled": true, "name": ""}}
但你的AlertConfig类里直接把onWarning定义成了Alert类型,Jackson尝试把{"alert":...}这个对象解析成Alert类时,发现Alert没有alert这个字段,所以抛出了UnrecognizedPropertyException。
解决方案1:新增中间包装类(最直观)
你需要一个类来对应JSON里那层包含alert的对象,比如创建AlertWrapper:
public class AlertWrapper { @JsonProperty("alert") public Alert alert; }
然后修改AlertConfig,把原来的Alert类型字段换成AlertWrapper:
public class AlertConfig { @JsonProperty("onSuccess") public AlertWrapper onSuccess; @JsonProperty("onWarning") public AlertWrapper onWarning; @JsonProperty("onError") public AlertWrapper onError; }
之后解析代码里的调用也要对应调整:
System.out.println(lib.action.onWarning.alert.isEnabled);
解决方案2:自定义反序列化(进阶方案)
如果不想新增类,也可以给Alert类添加自定义反序列化逻辑,直接跳过外层的alert字段读取内部数据,但这种方法会增加代码复杂度,不如第一种方案直观易维护。
额外提醒:修复JSON语法错误
你提供的JSON字符串最后少了一个闭合的},正确的JSON应该是:
{"action": {"onWarning":{"alert":{"isEnabled": true, "name": ""}}, "onError":{"alert":{"isEnabled": true, "name": ""}}, "onSuccess":{"alert":{"isEnabled": true, "name": ""}}}}
这个小问题也会导致解析失败,记得先修正它!
内容的提问来源于stack exchange,提问作者Shiv
相关产品推荐
相关产品推荐

