缺少财产' @ type'这是在使用抽象类时包含类型id

时间:2017-11-16 17:55:43

标签: spring-mvc jackson jackson2

我正在使用Spring Boot 1.5.8.RELEASE并处理两个共同拥有大量字段的DTO,因此我创建了一个抽象的DTO。

我希望杰克逊总能为HTTP-POST选择合适的具体DTO。

我创建了这样的抽象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:缺少属性   &#39; @类型&#39;这是包含类型id

0 个答案:

没有答案