Я получаю исключение при выполнении интеграционного теста с 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
он завершается с исключением, упомянутым ранее.В чем может быть причина?