与Convert JsonNode into POJO相似 和Converting JsonNode to java array,但无法找到问题的确切解决方案。
这是我的POJO声明:
public class Building implements Serializable {
private BuildingTypes type;
public Building(BuildingTypes type) {
this.type = type;
}
public BuildingTypes getType() {
return type;
}
}
public enum BuildingTypes {
TRIPLEX, DUPLEX, HOUSE
}
所以在我的测试中,我想得到一个建筑物列表,并将json列表转换/绑定到真实对象构建列表。
这是我想要做的事情:
Result result = applicationController.listLatestRecords();
String json = contentAsString(result);
JsonNode jsonNode = Json.parse(json);
List<Building> buildings = new ArrayList<>();
buildings.add(mapper.treeToValue(jsonNode.get(0), Building.class));
但是,我收到以下错误:
com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class domain.building.Building]: can not instantiate from JSON object (need to add/enable type information?)
显然,如果我在Building类中删除我的构造函数并为我的字段类型添加一个setter,它就可以了。但是如果我确实要求强制我避免使用setter等,那么必须使用构造函数来初始化类型值吗?我怎样才能轻松地将json绑定/转换为建筑物列表?
我也尝试了以下但没有成功:
List<Building> buildings = mapper.readValue(contentAsString(result),
new TypeReference<List<Building>>() {});
答案 0 :(得分:2)
错误消息说明了一切,您的Building
类没有默认构造函数,因此Jackson无法创建它的实例。
在Building
类
public class Building implements Serializable {
private BuildingTypes type;
public Building(BuildingTypes type) {
this.type = type;
}
// Added Constructor
public Building() {
}
public BuildingTypes getType() {
return type;
}
}