JsonMappingException: не найден подходящий конструктор для типа [простой тип, класс]: невозможно создать экземпляр объекта JSON - PullRequest
402 голосов
/ 02 октября 2011

При попытке получить и обработать JSON-запрос появляется следующая ошибка:

org.codehaus.jackson.map.JsonMappingException: не найден подходящий конструктор для типа [простой тип, классcom.myweb.ApplesDO]: невозможно создать экземпляр объекта JSON (нужно добавить / включить информацию о типе?)

Вот JSON, который я пытаюсь отправить:

{
  "applesDO" : [
    {
      "apple" : "Green Apple"
    },
    {
      "apple" : "Red Apple"
    }
  ]
}

В Controller у меня есть следующая сигнатура метода:

@RequestMapping("showApples.do")
public String getApples(@RequestBody final AllApplesDO applesRequest){
    // Method Code
}

AllApplesDO - это оболочка ApplesDO:

public class AllApplesDO {

    private List<ApplesDO> applesDO;

    public List<ApplesDO> getApplesDO() {
        return applesDO;
    }

    public void setApplesDO(List<ApplesDO> applesDO) {
        this.applesDO = applesDO;
    }
}

ApplesDO:

public class ApplesDO {

    private String apple;

    public String getApple() {
        return apple;
    }

    public void setApple(String appl) {
        this.apple = apple;
    }

    public ApplesDO(CustomType custom){
        //constructor Code
    }
}

Я думаю, чтоДжексон не может преобразовать JSON в объекты Java для подклассов.Пожалуйста, помогите с параметрами конфигурации для Джексона для преобразования JSON в объекты Java.Я использую Spring Framework.

РЕДАКТИРОВАТЬ: Включена основная ошибка, которая вызывает эту проблему в приведенном выше примере класса - Пожалуйста, посмотрите принятый ответ для решения.

Ответы [ 13 ]

0 голосов
/ 24 апреля 2019

Относительно последней публикации у меня была та же проблема, когда использование Lombok 1.18. * Создавало проблему.

Мое решение состояло в том, чтобы добавить @NoArgsConstructor (конструктор без параметров), поскольку @Data по умолчанию включает @RequiredArgsConstructor (Конструктор с параметрами).

lombok Документация https://projectlombok.org/features/all

Это решит проблему:

package example.counter;

import javax.validation.constraints.NotNull;

import lombok.Data;

@Data
@NoArgsConstructor
public class CounterRequest {
    @NotNull
    private final Integer int1;

    @NotNull
    private final Integer int2;
}
0 голосов
/ 08 июня 2018

Для меня это работало, но обновление библиотек привело к появлению этой проблемы.Проблема в том, что у нас был класс:

package example.counter;

import javax.validation.constraints.NotNull;

import lombok.Data;

@Data
public class CounterRequest {
    @NotNull
    private final Integer int1;

    @NotNull
    private final Integer int2;
}

Использование lombok:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.0</version>
</dependency>

Откат к

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.10</version>
</dependency>

Исправлена ​​проблемаНе знаю почему, но хотел документировать это на будущее.

0 голосов
/ 14 января 2016

Сбой пользовательских сериализаторов / десериализаторов Джексона также может быть проблемой.Хотя это не ваш случай, стоит упомянуть.

Я столкнулся с тем же исключением, и это имело место.

...