Джексон десериализует JSON с ошибкой HashMap - PullRequest
0 голосов
/ 25 июня 2019

Мой контроллер возвращает данные 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 ​​?Спасибо за любые полезные советы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...