在默认实现的接口中声明的终结点没有OpenAPI可见终结点

时间:2019-02-13 03:31:24

标签: java spring-boot jersey swagger openapi

我正在编写一个创建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文档将起作用。

所以我想知道是否有一种方法可以使其与接口配合使用?

我无法找到解决方案,但是必须使用接口而不是继承,因为我的控制器需要实现多个接口。

感谢您的所有想法:)

0 个答案:

没有答案