首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnrecognizedPropertyException:无法识别的字段"sections“

UnrecognizedPropertyException:无法识别的字段"sections“
EN

Stack Overflow用户
提问于 2018-04-15 05:25:01
回答 1查看 2.9K关注 0票数 0

我正在使用Jackson作为spring boot应用程序的一部分。我正在将JSON转换为Java,并且我得到了这个错误。我做了一些研究,但我仍然不知道哪里出了问题,也不知道如何修复它。

以下是JSON片段:

代码语言:javascript
复制
      "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对象:

代码语言:javascript
复制
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对象如下所示:

代码语言:javascript
复制
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显示的那样。

现在的错误是:

代码语言:javascript
复制
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“--但这不是我的元素之一。它显然与我的部分列表有问题,但我不知道它是什么。

谁能解释一下为什么会发生这种情况,特别是因为我的结构看起来是正确的,以及如何解决这个问题。我在其他帖子上看到过:

代码语言:javascript
复制
 objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

但这似乎是令人难以置信的错误,因为我知道我所有的属性。

EN

回答 1

Stack Overflow用户

发布于 2018-04-17 03:12:08

看起来JSON本身在一个或多个dataBlock.sections项中有另一个sections字段。如果无法控制JSON对象的构造,则需要在SectionObject类上添加@JsonIgnoreProperties注释,以便当JSON对象包含POJO中未指定的字段时,在反序列化期间不会抛出错误。

代码语言:javascript
复制
@JsonIgnoreProperties(ignoreUnknown = true)
public class SectionObject {
    // class members and methods here
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49836350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档