У меня есть класс:
@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));
}
Когда Джексон пытается разобрать AppealTemplateDto
, происходит сбой за исключением:
вызвано:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: невозможно
построить экземпляр
ru.appeal.template.dto.field.AbstractFieldDto
(Создатели, как и конструкция по умолчанию, не существуют): либо абстрактные типы
необходимо сопоставить с конкретными типами, иметь собственный десериализатор или
содержать дополнительную информацию о типе
Как я понимаю, Джексон не может определить, как разыгрывать входящие AbstractFieldDto
. Посоветуйте, пожалуйста, что делать?