我正在编写一个创建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文档将起作用。
所以我想知道是否有一种方法可以使其与接口配合使用?
我无法找到解决方案,但是必须使用接口而不是继承,因为我的控制器需要实现多个接口。
感谢您的所有想法:)