我正在使用Jackson作为spring boot应用程序的一部分。我正在将JSON转换为Java,并且我得到了这个错误。我做了一些研究,但我仍然不知道哪里出了问题,也不知道如何修复它。
以下是JSON片段:
"dataBlock": {
"sections": [
{
"info": "",
"prompt": "",
"name": "First Section",
"sequence": 0,
"fields": [],
"gatingConditions": [],
"guid": "480d160c-c34f-4022-97b0-e8a1f28c49ae",
"id": -2
}
],
"prompt": "",
"id": -1,
"name": ""
}所以这个"dataBlock“元素的Java对象:
public class DataBlockObject {
private int id;
private String prompt;
private String name;
private List<SectionObject> sections;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPrompt() {
return prompt;
}
public void setPrompt(String prompt) {
this.prompt = prompt;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<SectionObject> getSections() {
return sections;
}
public void setSections(List<SectionObject> sections) {
this.sections = sections;
}
}Section对象如下所示:
public class SectionObject {
private int id;
private String name;
private String prompt;
private String info;
private int sequence;
private List<FieldObject> fields;
private List<GatingConditionObject> gatingConditions;
private String guid;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrompt() {
return prompt;
}
public void setPrompt(String prompt) {
this.prompt = prompt;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public int getSequence() {
return sequence;
}
public void setSequence(int sequence) {
this.sequence = sequence;
}
public List<FieldObject> getFields() {
return fields;
}
public void setFields(List<FieldObject> fields) {
this.fields = fields;
}
public List<GatingConditionObject> getGatingConditions() {
return gatingConditions;
}
public void setGatingConditions(List<GatingConditionObject> gatingConditions) {
this.gatingConditions = gatingConditions;
}
public String getGuid() {
return guid;
}
public void setGuid(String guid) {
this.guid = guid;
}
}所以在我看来,杰克逊会制作一个DataBlockObject,映射明显的元素,并创建一个数组,我已经清楚地标记为一个名为sections的列表。--就像JSON显示的那样。
现在的错误是:
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "sections" (class com.gridunity.workflow.bean.json.SectionObject), not marked as ignorable (8 known properties: "gatingConditions", "sequence", "prompt", "fields", "id", "info", "guid", "name"])现在,根据这个错误,我的8个元素中似乎有一个应该命名为"sections“--但这不是我的元素之一。它显然与我的部分列表有问题,但我不知道它是什么。
谁能解释一下为什么会发生这种情况,特别是因为我的结构看起来是正确的,以及如何解决这个问题。我在其他帖子上看到过:
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);但这似乎是令人难以置信的错误,因为我知道我所有的属性。
发布于 2018-04-17 03:12:08
看起来JSON本身在一个或多个dataBlock.sections项中有另一个sections字段。如果无法控制JSON对象的构造,则需要在SectionObject类上添加@JsonIgnoreProperties注释,以便当JSON对象包含POJO中未指定的字段时,在反序列化期间不会抛出错误。
@JsonIgnoreProperties(ignoreUnknown = true)
public class SectionObject {
// class members and methods here
}https://stackoverflow.com/questions/49836350
复制相似问题