Привязка данных Джексона MismatchedInputException

Используя конфигурацию spring для чтения данных из json в bean-компонент Spring, он работает для простого типа, но я получаю указанную выше ошибку при попытке прочитать массив это мой конфиг

@Bean
Container container() throws IOException {

    ObjectMapper objectMapper = new ObjectMapper();

    return objectMapper.readValue(getClass().getClassLoader().getResource("book.json"), Container.class);
}

Я решил поместить в контейнер, как было предложено, так что нормально, чтобы моя конфигурация выглядела так? Поскольку я буду использовать эти данные для создания некоторых контроллеров Spring. ПОХО КЛАСС

public class Container {
String requestedUrl;
  List<Item> items;}

Это данные json,

{
  "requestedUrl": "https://www.googleapis.com/books/v1/volumes?q=java&maxResults=40",
  "items": [
    {
      "kind": "books#volume",
      "id": "7tkN1CYzn2cC",
      "etag": "pfjjxSpetIM",
      "selfLink": "https://www.googleapis.com/books/v1/volumes/7tkN1CYzn2cC",
      "volumeInfo": {
        "title": "A Hypervista of the Java Landscape",
        "publisher": "InfoStrategist.com",
        "industryIdentifiers": [
          {
            "type": "ISBN_13",
            "identifier": "9781592432172"
          },
          {
            "type": "ISBN_10",
            "identifier": "1592432174"
          }
        ],
        "readingModes": {
          "text": true,
          "image": true
        },
        "printType": "BOOK",
        "maturityRating": "NOT_MATURE",
        "allowAnonLogging": false,
        "contentVersion": "1.0.1.0.preview.3",
        "imageLinks": {
          "smallThumbnail": "http://books.google.com/books/content?id=7tkN1CYzn2cC&printsec=frontcover&img=1&zoom=5&edge=curl&source=gbs_api",
          "thumbnail": "http://books.google.com/books/content?id=7tkN1CYzn2cC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api"
        },
        "language": "en",
        "previewLink": "http://books.google.pl/books?id=7tkN1CYzn2cC&pg=PP1&dq=java&hl=&cd=1&source=gbs_api",
        "infoLink": "http://books.google.pl/books?id=7tkN1CYzn2cC&dq=java&hl=&source=gbs_api",
        "canonicalVolumeLink": "https://books.google.com/books/about/A_Hypervista_of_the_Java_Landscape.html?hl=&id=7tkN1CYzn2cC"
      },
      "saleInfo": {
        "country": "PL",
        "saleability": "NOT_FOR_SALE",
        "isEbook": false
      }, //Shortened for brevity 

Как отредактировать конфиг, чтобы он работал

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы передаете объект json, который ограничен {}, но пытаетесь преобразовать его в массив. С этим json вы должны преобразовать в другой класс, например

public class Container {
    private String requestedUrl;
    private List<Item> items;

    // getters/setters
}

И я буду использовать контейнер в весенней конфигурации?

valik 07.04.2019 18:02

Нет, это просто тот же класс DTO, что и Item. В основном нет необходимости помещать их в конфигурацию spring. ObjectMapper исходит из библиотеки Джексона, а не напрямую из Spring.

Dmitry Margolis 07.04.2019 18:05

Нет, я должен использовать Spring Bean, потому что я буду создавать API из этих данных, поэтому я обновлю свой вопрос, и вы скажете мне, все ли в порядке.

valik 07.04.2019 18:19

Это нормально, но из текущего примера JSON похоже, что вы должны возвращать Container, а не Container[].

Dmitry Margolis 07.04.2019 20:08

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