Отсутствует свойство '@type', которое должно содержать идентификатор типа при использовании абстрактного класса
Я использую Spring Boot 1.5.8.RELEASE и обрабатываю два DTO, которые имеют много общих полей, поэтому я создал абстрактный DTO.
Я надеялся, что Джексон всегда выберет соответствующий конкретный DTO для HTTP-POST.
Я создал это абстрактное DTO следующим образом:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = InViewModel.class),
@JsonSubTypes.Type(value = In2ViewModel.class) })
public abstract class AbstractInAndIn2ViewModel {..}
Конкретные DTO выглядят так:
public class InViewModel extends AbstractInAndIn2ViewModel {..}
а также
public class In2ViewModel extends AbstractInAndIn2ViewModel {..}
Мой класс конвертера, который обрабатывает преобразование DTO в DAO, выглядит следующим образом:
public void convertDTO_To_DAO(AbstractInAndIn2ViewModel abstInView) {
if (abstInView instanceof InViewModel) {
InViewModel inView=(InViewModel)abstInView;
In in = new In();
in.setName(inView.getName());
...
}
if (abstInView instanceof In2ViewModel) {
In2ViewModel in2View=(In2ViewModel)abstInView;
In2 in2 = new In2();
in2.setName(in2View.getName());
...
}
Вызов HTTP-POST выглядит следующим образом:
@PostMapping(value = "/item/input")
public ResponseEntity<Void> createInput(@RequestBody @Valid AbstractInAndIn2ViewModel input) {..}
К сожалению, я всегда получаю сообщение об ошибке:
Неожиданный токен (END_OBJECT), ожидаемый FIELD_NAME: отсутствует свойство '@type', которое должно содержать идентификатор типа