Я пишу общую систему создания конечных точек REST.Я использую Jersey + Spring в своем проекте, но моя проблема связана только с OpenAPI.Я использую Swagger 2 (OpenAPI 3.0)
Я объявляю все мои конечные точки и их документацию в интерфейсах с реализацией по умолчанию.Поэтому в моем классе мне не нужно объявлять методы, которые уже имеют реализацию по умолчанию.
Вот пример моего кода:
public interface SampleEndpoints {
@POST
@Path("/")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "Created"),
@ApiResponse(responseCode = "400", description = "Bad Request"),
@ApiResponse(responseCode = "403", description = "Forbidden"),
@ApiResponse(responseCode = "404", description = "Not Found")})
default String create(Object param ) {
return "ok";
}
@GET
@Path("/{id}")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Ok"),
@ApiResponse(responseCode = "400", description = "Bad Request"),
@ApiResponse(responseCode = "403", description = "Forbidden"),
@ApiResponse(responseCode = "404", description = "Not Found")})
String find(String id);
}
Класс контроллера
@Component
@Path("/cars")
public class CarsController implements SampleEndpoints {
public String find(String id) {
return "Yes I've found it";
}
}
Как видите, мне не нужно реализовывать метод create, потому что его реализация по умолчанию достаточна.
Моя проблема в том, что метод create не появляется в сгенерированном openapi.json (но есть метод find со всей информацией)
Если вместо интерфейса я объявляю SampleEndpoints как класс и делаю мой CarsController наследующим SampleEndpoints, то открытая документация Api работает.
Так что я хотел бы знать, есть ли способ заставить его работать с интерфейсом?
Мне не удается найти решение, но использование интерфейса вместо наследования является обязательным, потому что мой контроллер должен реализоватьнесколько интерфейсов.
Спасибо за все ваши идеи:)