"没有合适的构造函数"反序列化JSON子级时出错

时间:2015-03-10 11:14:24

标签: java json jackson deserialization fasterxml

我尝试使用fasterxml / 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?

1 个答案:

答案 0 :(得分:0)

public Groups() {
    groups = new ArrayList<>();
}

默认构造函数用于序列化,groups仅定义为接口。

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