Получение вложенного массива из json с использованием библиотеки jackson - java

У меня есть такой JSON:

    {
        "result": [
            {
                "reservation_id": 101,
                "euro_fee": 11.00,
                "hotel_id": 1
            },
            {
                "reservation_id": 102,
                "euro_fee": 12.00,
                "hotel_id": 2
            },
            {
                "reservation_id": 103,
                "euro_fee": 13.00,
                "hotel_id": 3
            }
        ],
        "meta": {
            "ruid": "0001="
        }
    }

и я пытаюсь использовать Jackson (с Spring Boot) для его синтаксического анализа и привязки. Вот мои POJO:

Response.java

    public class Response {

        private Result result;
        private Meta meta;

        public Response() {
        }

        public Result getResult() {
            return result;
        }

        public void setResult(Result result) {
            this.result = result;
        }

        public Meta getMeta() {
            return meta;
        }

        public void setMeta(Meta meta) {
            this.meta = meta;
        }
    }

Meta.java

    public class Meta {

        private String ruid;

        public Meta() {
        }

        public String getRuid() {
            return ruid;
        }

        public void setRuid(String ruid) {
            this.ruid = ruid;
        }
    }

Result.java

    public class Result {

        private Booking[] results;

        public Result() {
        }

        public Booking[] getResults() {
            return results;
        }

        public void setResult(Booking[] results) {
            this.results = results;
        }
    }

Booking.java

    public class Booking {


        private long reservation_id;

        private long hotel_id;

        private Double euro_fee;

        public Booking() {
        }

        public long getReservation_id() {
            return reservation_id;
        }

        public void setReservation_id(long reservation_id) {
            this.reservation_id = reservation_id;
        }

        public long getHotel_id() {
            return hotel_id;
        }

        public void setHotel_id(long hotel_id) {
            this.hotel_id = hotel_id;
        }


        public Double getEuro_fee() {
            return euro_fee;
        }

        public void setEuro_fee(Double euro_fee) {
            this.euro_fee = euro_fee;
        }
    }

Я могу получить ruid из meta, используя:

        // getting JSON from REST
        String response = restTemplate.postForObject(resourceURL, httpEntity, String.class);

        // use jackson
        ObjectMapper mapper = new ObjectMapper();
        Response theResponse = mapper.readValue(response, Response.class);
        System.out.println("getRuid: " + theResponse.getMeta().getRuid());

но я не могу получить объекты или отдельный элемент из вложенного массива. Когда я пытаюсь получить массив элементов, я получаю сообщение об ошибке:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of out of START_ARRAY token at [Source: (String)...

Я знаю, что это должно быть легко, но я впервые использую Джексон, и проблема может быть где-то в глубине души.

2
0
182
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените свой класс ответа.

Попробуйте с этим:

public class Response {

        private List<Booking> result;
        private Meta meta;
//getter setter
}

Это мне помогает + я исключил Result.java

Max Gabderakhmanov 10.08.2018 16:09

Другие вопросы по теме