Десериализация Джексона подтипа не удалась при запуске с Gradle - PullRequest
0 голосов
/ 25 февраля 2019

Я получаю исключение при выполнении интеграционного теста с Gradle.

Исключение, которое я получаю:

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of AbstractCommonDetails: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

Класс Summary содержит следующие аннотации к деталям, которые я получаю.пытаюсь десериализовать:

@Data
public class Summary {
  @JsonTypeInfo(use = NAME, include = PROPERTY, property = "@type")
  @JsonSubTypes({
      @JsonSubTypes.Type(value = CardDetails.class, name = "CARD")
  })
  private AbstractCommonDetails details;
}

AbstractCommonDetails выглядит следующим образом:

@Getter
@Setter
public abstract class AbstractCommonDetails {
  private Long id;
  public abstract String getPaymentMethod();
}

А у CardDetails есть аннотации @JsonTypeName("CARD") и @Data и реализация метода getPaymentMethod.

Конфигурирование и десериализация ObjectMapper выполняется следующим образом:

new ObjectMapper().findAndRegisterModules().readValue(IOUtils.toString(inputStream, "UTF-8"), Summary.class);

И пример json:

{
  "details":{
    "@type":"CARD",
    "amount":"10.00"
}

Странная вещь - запуск теста интеграции как теста Junit завершается успешно, нопри запуске того же интеграционного теста с командой gradlew test он завершается с исключением, упомянутым ранее.В чем может быть причина?

1 Ответ

0 голосов
/ 25 февраля 2019

Если тест работает на IDE, но не работает с gradle, это означает, что вам нужно взглянуть на gradle конфигурацию.Вы используете Lambook, поэтому вы должны быть уверены, что конфигурация gradle знает о Lambok аннотациях.

См. Также:

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