我喜欢Swagger
,因为它使您的api非常友好。我使用Swagger
注释,如
在端点上,查询参数,请求参数,请求正文等。
我喜欢让我的POJO
课程保持干净,一般来说我会尽量遵循DRY
规则但是,当谈到招摇时,我注意到我坚持重复我一遍又一遍地如下所示
@ApiOperation(value = "Retrieve object by id")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 400, message = "Bad Request"),
@ApiResponse(code = 500, message = "ISE")
})
public Response retrieveById(@ApiParam(value = "Some id") @PathParam("sid") int id) {
}
@ApiOperation(value = "Create object")
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 400, message = "Bad Request"),
@ApiResponse(code = 500, message = "ISE")
})
public Response create(@ApiParam(value = "Request body") RequestBody body) {
}
如何避免使用Swagger annotations
重复自己?
答案 0 :(得分:6)
我做了一些谷歌搜索,遇到了github issue和其他一些与ApiResponses
注释没有直接关系的SO questions,其中没有一个似乎提供了有效的解决方案。
使用Swagger UI 2.0
我想让我们尝试一下,所以我做了以下
GroupedApiResponses..
GroupedApiResponses..
GroupedApiResponses..
注释
见下文
package com.raf.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Ok"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 400, message = "Bad Request"),
@ApiResponse(code = 500, message = "ISE")
})
public @interface GroupedApiResponsesAvecOk {
}
类似地(您可以根据端点的结构和返回的响应消息,在一个或多个自定义注释中根据需要对注释进行分组)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 400, message = "Bad Request"),
@ApiResponse(code = 500, message = "ISE")
})
public @interface GroupedApiResponsesAvecCreated {
}
然后我使用@GroupedApiResponsesAvecOk
上的retrieveById
和@GroupedApiResponsesAvecCreated
端点create
代替@ApiResponses
,并像以前一样工作。
如上所示,现在可以跨其他端点重复使用与ApiResponse
相关的400, 404, 500
注释。