一個好的可持續交付的項目,項目說明,和接口文檔是必不可少的,swagger api
就能夠幫咱們很容易自動生成api 文檔,不須要單獨額外的去寫,無侵入式,方便快捷大大減小先後端的溝通方便查找和測試接口提升團隊的開發效率方便新人瞭解項目,剩餘的時間就能夠去約妹子啦
html
這裏咱們本身去整合swagger api比較麻煩,要導入好幾個包,有大神幫咱們寫好了輪子kinfe4j直接對應SpringBoot的啓動項,並且在不影響原來使用功能上界面ui作了美化功能作了加強 咱們直接整合這個就行了java
<!--api 文檔--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.1</version> </dependency>
正如官網所說git
kinfe4j官方文檔點擊這裏github
爲咱們爲swagger配置更多的接口說明web
package cn.soboys.core.config; import cn.hutool.core.collection.CollUtil; import cn.soboys.core.ret.ResultCode; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.builders.ResponseBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.service.Response; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; /** * @author kenx * @version 1.0 * @date 2021/6/21 16:02 * api 配置類 */ @Configuration public class SwaggerConfigure { @Resource private SwaggerProperty swaggerProperty; /** * 構造api 文檔 * @return */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30).globalResponses(HttpMethod.POST, this.responseList()) //全局respons信息 .apiInfo(apiInfo(swaggerProperty)) //文檔信息 .select() //文檔掃描 //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //有ApiOperation註解的controller都加入api文檔 .apis(RequestHandlerSelectors.basePackage(swaggerProperty.getBasePackage())) //包模式 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo(SwaggerProperty swagger) { return new ApiInfoBuilder() //標題 .title(swagger.getTitle()) //描述 .description(swagger.getDescription()) //建立聯繫人信息 (做者,郵箱,網站) .contact(new Contact(swagger.getAuthor(), swagger.getUrl(), swagger.getEmail())) //版本 .version(swagger.getVersion()) //認證 .license(swagger.getLicense()) //認證協議 .licenseUrl(swagger.getLicenseUrl()) .build(); } /** * 全局response 返回信息 * @return */ private List<Response> responseList() { List<Response> responseList = CollUtil.newArrayList(); Arrays.stream(ResultCode.values()).forEach(errorEnum -> { responseList.add( new ResponseBuilder().code(errorEnum.getCode().toString()).description(errorEnum.getMessage()).build() ); }); return responseList; } }
抽出api文檔配置模版信息爲屬性文件方便複用spring
package cn.soboys.core.config; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringBootConfiguration; /** * @author kenx * @version 1.0 * @date 2021/6/21 16:01 * api 文檔信息 */ @Data @SpringBootConfiguration public class SwaggerProperty { /** * 須要生成api文檔的 類 */ @Value("${swagger.basePackage}") private String basePackage; /** * api文檔 標題 */ @Value("${swagger.title}") private String title; /** * api文檔 描述 */ @Value("${swagger.description}") private String description; /** * api文檔 版本 */ @Value("${swagger.version}") private String version; /** * api 文檔做者 */ @Value("${swagger.author}") private String author; /** * api 文檔做者網站 */ @Value("${swagger.url}") private String url; /** * api文檔做者郵箱 */ @Value("${swagger.email}") private String email; /** * api 文檔 認證協議 */ @Value("${swagger.license}") private String license; /** * api 文檔 認證 地址 */ @Value("${swagger.licenseUrl}") private String licenseUrl; }
在你的Controller上添加swagger註解segmentfault
@Slf4j @Api(tags = "登陸") public class LoginController { private final IUsersService userService; @PostMapping("/login") @ApiOperation("用戶登陸") public String login(@RequestBody UserLoginParams userLoginParams) { Users u = userService.login(userLoginParams); return "ok"; } }
注意如啓用了訪問權限,還需將swagger相關uri容許匿名訪問
/swagger**/** /webjars/** /v3/** /doc.html
重啓服務,自帶api文檔訪問連接爲/doc.html
界面以下:後端
相比較原來界面UI更加漂亮了,信息更完善功能更強大
## Swagger經常使用註解api
用在請求的類上,表示對類的說明,也表明了這個類是swagger2的資源數組
參數:
description = "用戶基本信息操做"
用於請求的方法上表示一個http請求的操做
參數:
tags能夠從新分組(視狀況而用)
用於請求方法上對請求參數,字段說明;表示對參數的添加元數據(說明或是否必填等)
參數:
required–是否必填
用於java實體類上表示對類進行說明,用於參數用實體類接收
參數:
description–描述
均可省略
### ApiModelProperty標記
用於方法,字段; 表示對model屬性的說明或者數據操做更改
參數:
@ApiModel(value="user對象",description="用戶對象user") public class User implements Serializable{ private static final long serialVersionUID = 1L; @ApiModelProperty(value="用戶名",name="username",example="xingguo") private String username; @ApiModelProperty(value="狀態",name="state",required=true) private Integer state; private String password; private String nickName; private Integer isDeleted; @ApiModelProperty(value="id數組",hidden=true) private String[] ids; private List<String> idList; //省略get/set }
用於請求類或者方法上,能夠不被swagger顯示在頁面上
用於方法表示單獨的請求參數
用於方法,包含多個 @ApiImplicitParam
參數:
@ApiOperation("查詢測試") @GetMapping("select") //@ApiImplicitParam(name="name",value="用戶名",dataType="String", paramType = "query") @ApiImplicitParams({ @ApiImplicitParam(name="name",value="用戶名",dataType="string", paramType = "query",example="xingguo"), @ApiImplicitParam(name="id",value="用戶id",dataType="long", paramType = "query")}) public void select(){ }