Jackon使用HashMap错误将JSON反序列化

时间:2019-06-24 21:18:08

标签: java json jackson

我的控制器返回具有混合类型列表的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 列表上使用类型引用?感谢您提供任何有用的提示。

0 个答案:

没有答案