我的控制器返回具有混合类型列表的JSON数据。现在,我在该站点上看到了解决方案,您可以在其中创建JSON数据本身的类型引用。但是,它是JSON中的单个列表,会引发错误。这是我的控制器:
String finalName = "json/myPlans.json";
Path path =
Paths.get(getClass().getClassLoader().getResource(finalName).toURI());
byte[] jsonData = Files.readAllBytes(path);
ObjectMapper objectMapper = new ObjectMapper();
MyPlan data = objectMapper.readValue(jsonData, MyPlan.class);
这是 MyPlan 类:
public class MyPlan{
private MyPlanData data;
public MyPlanData getData() {
return data;
}
public void setData(MyPlanData data) {
this.data = data;
}
}
,然后是 MyPlanData 。在此类中, columnValues 数组是混合类型的列表。我不想做一个实际上没有用的对象列表,而是想尝试以下类似的操作,其中我有一个字符串和整数映射列表。为什么这样行不通?
public class MyPlanData {
private int clientId;
private List<String> columnNames;
private List<Map> columnValues;
public int getClientId() {
return clientId;
}
public void setClientId(int clientId) {
this.clientId = clientId;
}
public List<String> getColumnNames() {
return columnsName;
}
public void setColumnNames(List<String> columnNames) {
this.columnNames = columnNames;
}
public List<Map<String, Integer>> getColumnValues() {
return columnValues;
}
public void setColumnValues(List<Map<String, Integer>> columnValues) {
this.columnValues = columnValues;
}
}
这是JSON:
{
"data": {
"clientId": 22,
"columnName": [
"planCategory",
"planCategoryId"
],
"columnValues": [
[
"Plan One",
1
],
[
"Plan Two",
2
],
[
"Plan Three",
3
],
[
"Plan Four",
4
],
[
"Plan Five",
5
]
]
}
}
显然,这会产生以下错误:
Cannot deserialize instance of `java.util.HashMap` out of START_ARRAY token
那么如何仅在 ColumnValues 列表上使用类型引用?感谢您提供任何有用的提示。