У меня есть простое приложение Spring Boot с одной конечной точкой REST для возврата объекта "Job", который содержит список полиморфных элементов рядом с другими вещами.
Мы используем подход Code First и пытаемся создать модели API, соответствующие нашим потребностям. Но сгенерированный Api Doc не представляет нашу модель в ее полной сложности, поскольку он не разрешает список полиморфных элементов.
Объект Job выглядит как
@Data // Lombok Getters and Setters
public final class Job {
private String foo;
private String bar;
private List<Condition> conditionList;
}
Условие является родительским объектом для набора различных условий
public abstract class Condition {
}
Два примера реализации условия будут
@Data
public final class Internal extends Condition {
private String nodeId;
}
и
@Data
public final class Timed extends Condition {
private ZonedDateTime timestamp;
}
Контроллер REST тупо прост:
@RestController
@RequestMapping("/hello")
public class MyController {
@GetMapping
public ResponseEntity<Job> getJob() {
return new ResponseEntity<>(new Job(), HttpStatus.OK);
}
}
Теперь, когда я открываю интерфейс Swagger и смотрю на сгенерированное определение, элемент conditionList
является пустым объектом {}
Я пытался использовать @JsonSubTypes и @ApiModel на классифицированных, но не было никакой разницы в выводе. Возможно, я их не правильно использовал, или, возможно, Сваггер просто не в состоянии выполнить эту работу, или, может быть, я просто слепой или глупый.
Как я могу заставить Swagger включить подтипы в сгенерированный api doc?