Отсутствует свойство '@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', которое должно содержать идентификатор типа

0 ответов

Другие вопросы по тегам