Нет видимой конечной точки OpenAPI для конечной точки, объявленной в интерфейсе с реализацией по умолчанию - PullRequest
0 голосов
/ 13 февраля 2019

Я пишу общую систему создания конечных точек 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 работает.

Так что я хотел бы знать, есть ли способ заставить его работать с интерфейсом?

Мне не удается найти решение, но использование интерфейса вместо наследования является обязательным, потому что мой контроллер должен реализоватьнесколько интерфейсов.

Спасибо за все ваши идеи:)

...