【发布时间】:2019-10-17 03:39:04
【问题描述】:
我有一堂课:
@EqualsAndHashCode(callSuper = true)
@Data
public class AppealTemplateDto extends AbstractDto {
private List<AbstractFieldDto> fields;
}
该类包含AbstractFieldDto 继承者列表,例如:
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
public class InputFieldDto extends AbstractFieldDto {
private String fieldType = FieldType.INPUT.name();
private String text;
}
总共有近 6-7 个继承者,& AbstractTemplateDto 可以包含其中的任何一组。
控制器:
@PostMapping
public ResponseEntity<AppealTemplateDto> create(@RequestBody AppealTemplateDto dto) {
return ResponseEntity.ok(service.save(dto));
}
当 Jackson 尝试解析 AppealTemplateDto 时,它会崩溃并出现异常:
原因: com.fasterxml.jackson.databind.exc.InvalidDefinitionException:不能 构造实例
ru.appeal.template.dto.field.AbstractFieldDto(不存在像默认构造那样的创建者):抽象类型也 需要映射到具体类型,具有自定义反序列化器,或者 包含额外的类型信息
据我了解,Jackson 无法定义如何投射传入的AbstractFieldDto。请教我,该怎么办?
【问题讨论】:
-
添加默认构造函数。