【问题标题】:"no suitable constructor" error when deserializing JSON children反序列化 JSON 子项时出现“没有合适的构造函数”错误
【发布时间】:2015-03-10 11:14:24
【问题描述】:

我正在尝试使用 fastxml/jackson 将 json 结构映射到 pojo。

我的 json 来自一个文件,看起来像这样:

{
   "groups": [
      {
         "name": "Group1",
         "icon": "group1.png",
         "banner": "banner.png"
      },
      {
         "name": "Group2",
         "icon": "group2.png",
         "banner": "banner.png"
      }
   ],
   "ticker": [
      {
         "title": "ticker1",
         "description": "description",
         "url": "bla",
         "icon": "icon.png",
         "banner": "banner.png",
         "group": "Group1",
         "enabled": "true",
         "startTime": "00:00",
         "startDate": "15.10.2013"
      }
   ]
}

我对小组感兴趣。因此我创建了一个类 Groups:

public class Groups implements Serializable {
  private final static long serialVersionUID = 42L;

  private List<Group> groups;

  public Groups() {}

  public Groups ( List<Group> groups ) {
    this.groups = groups;
  }

  public List<Group> getGroups() {
    if (groups == null) {
        groups = new ArrayList<Group>();
    }
    return groups;
  }

  public void add(Group group) {
    getGroups().add(group);
  }
}

通常我使用此代码将 json 映射到 pojo:

public static <T> T readJsonFile(File file, Class<T> valueType) throws IOException {
    String json = readJsonFile(file.getAbsolutePath());
    if( StringUtils.isEmpty(json) ) {
        return null;
    }
    return createObjectMapper().readValue(json, valueType);
}

如果 pojo 是外部 json 对象,这可以正常工作。 但是,如果我试图提取组,它会失败: "no suitable constructor".

如何提取嵌套在 json 结构中的 pojo?

【问题讨论】:

  • 要么手动提取,然后将其提供给解析器,要么创建整个 JSON 结构的 Java 表示,然后访问“组”部分。

标签: java json jackson deserialization fasterxml


【解决方案1】:
public Groups() {
    groups = new ArrayList<>();
}

序列化时使用默认构造函数,groups只是定义为接口。

我什至会更改所有内容,并将该字段初始化为非空值。

【讨论】:

  • 我已经尝试过你的方法,但我仍然得到同样的错误。
  • 那么只能是private List&lt;Group&gt; groups = new ArrayList&lt;&gt;();
  • 您的第一个答案毕竟是正确的。我的小组课中有一个隐藏的例外。谢谢。
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2013-07-12
  • 2015-07-16
相关资源
最近更新 更多