我正在使用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