我有一堂课:
@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时,它异常崩溃:
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of ru.appeal.template.dto.field.AbstractFieldDto (no Creators, like default construct, exist): 抽象类型要么需要映射到具体类型,要么有自定义反序列化器,要么包含额外的类型信息
据我了解,杰克逊无法定义如何投射 incoming AbstractFieldDto。请教我,该怎么办?
holdtom
相关分类