Я получаю исключение при запуске интеграционного теста с 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 происходит сбой с исключением, упомянутым ранее. Что может быть причиной?
Тест Junit запускается в среде IDE. Выложил код AbstractCommonDetails
если не работает с gradle значит нужно как-то настроить Lambok аннотации для работы. Не могли бы вы проверить, например, что Конфигурация annotationProcessor gradle 4.7+ не запускает ломбок
Я попытаюсь удалить аннотации ломбока и запустить тесты, чтобы проверить, не в этом ли проблема.
@MichałZiober удаление аннотаций ломбока действительно устранило проблему - я попытаюсь заставить его работать на примере с ломбоком. Благодарность!




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