【发布时间】:2021-08-30 11:56:32
【问题描述】:
我在将以下 JSON 字符串反序列化为 Java 对象时遇到问题。
{
"action": {
"onWarning":{
"alert":{
"isEnabled": true,
"name": ""
}
},
"onError":{
"alert":{
"isEnabled": true,
"name": ""
}
},
"onSuccess":{
"alert":{
"isEnabled": true,
"name": ""
}
}
}
}
下面的代码应该可以工作,但我认为我的问题在于我正在传递的映射器 -
ObjectMapper mapper = new ObjectMapper();
JobConfig lib = mapper.readValue(jsonString, JobConfig.class);
System.out.println(lib.action.onWarning.alert.isEnabled);
我通过它的映射器如下:
Alert.java
public class Alert{
@JsonProperty("isEnabled")
public boolean isEnabled;
@JsonProperty("name")
public String name;
}
AlertConfig.java
public class AlertConfig {
@JsonProperty("onSuccess")
public Alert onSuccess;
@JsonProperty("onWarning")
public Alert onWarning;
@JsonProperty("onError")
public Alert onError;
}
JobConfig.java
public class JobConfig {
@JsonProperty("action")
public AlertConfig action;
}
我得到的错误是:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "alert" (class com.test.dv.service.domain.Alert), not marked as ignorable (2 known properties: "name", "isEnabled"])
我不确定如何将警报 JSON 的内容命名为 alert,但它已经被命名为 Alert。
【问题讨论】:
-
您在
AlertConfig之间缺少一个级别,该级别具有onSuccess和Alert之类的字段,而Alert具有isEnabled。什么应该映射到两者之间的alert? -
你可以引入包含Alert对象的AlertWrapper类,那么AlertConfig应该由AlertWrapper而不是Alert组成