0
與Convert JsonNode into POJO 和Converting JsonNode to java array類似,但無法找到解決我的問題的確切解決方案。使用自定義構造函數將JsonNode轉換爲POJO
這裏是我的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?)
顯然,如果我刪除我的構造建築類並添加二傳手對我的字段類型,它的工作原理。但是,如果我確實有一個要求強迫我避免使用setter,那麼必須使用構造函數來初始化類型值?我怎樣才能輕鬆地綁定/轉換json到建築物清單?
我也試過以下,但沒有成功:
List<Building> buildings = mapper.readValue(contentAsString(result),
new TypeReference<List<Building>>() {});
大壩,我覺得愚蠢的,但你說的沒錯添加默認的構造函數。它修復了我的問題,即使感覺不對,只是爲了測試而添加一個像這樣的默認空構造函數是錯誤的。因爲它是私人的,所以我很驚訝地發現類型集的價值。但我確實記得在傑克遜的文檔中他們說它適用於私人/受保護的領域。 – Jeep87c 2015-03-13 07:08:11
好奇心,沒有其他的替代解決方案可以避免添加這個空的「無用的」空構造函數? – Jeep87c 2015-03-13 07:08:58
需要一個空的構造函數來通過反射來創建一個新的實例。 – 2015-03-13 07:14:43