SpringBoot如何優(yōu)雅的整合Swagger Api自動生成文檔
前言
一個好的可持續(xù)交付的項目,項目說明,和接口文檔是必不可少的,swagger api 就可以幫我們很容易自動生成api 文檔,不需要單獨額外的去寫,無侵入式,方便快捷大大減少前后端的溝通方便查找和測試接口提高團隊的開發(fā)效率方便新人了解項目,剩余的時間就可以去約妹子啦
整合swagger api
這里我們自己去整合swagger api比較麻煩,要導(dǎo)入好幾個包,有大神幫我們寫好了輪子kinfe4j直接對應(yīng)SpringBoot的啟動項,而且在不影響原來使用功能上界面ui做了美化功能做了增強 我們直接整合這個就好了
<!--api 文檔-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
正如官網(wǎng)所說

自定義配置信息
為我們?yōu)閟wagger配置更多的接口說明
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;
/**
* 構(gòu)造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())
//創(chuàng)建聯(lián)系人信息 (作者,郵箱,網(wǎng)站)
.contact(new Contact(swagger.getAuthor(), swagger.getUrl(), swagger.getEmail()))
//版本
.version(swagger.getVersion())
//認證
.license(swagger.getLicense())
//認證協(xié)議
.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文檔配置模版信息為屬性文件方便復(fù)用
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 文檔作者網(wǎng)站
*/
@Value("${swagger.url}")
private String url;
/**
* api文檔作者郵箱
*/
@Value("${swagger.email}")
private String email;
/**
* api 文檔 認證協(xié)議
*/
@Value("${swagger.license}")
private String license;
/**
* api 文檔 認證 地址
*/
@Value("${swagger.licenseUrl}")
private String licenseUrl;
}
簡單使用
在你的Controller上添加swagger注解
@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";
}
}
注意如啟用了訪問權(quán)限,還需將swagger相關(guān)uri允許匿名訪問
/swagger**/** /webjars/** /v3/** /doc.html
重啟服務(wù),自帶api文檔訪問鏈接為/doc.html界面如下:

相比較原來界面UI更加漂亮了,信息更完善功能更強大
Swagger常用注解

Api標記
用在請求的類上,表示對類的說明,也代表了這個類是swagger2的資源
參數(shù):
- tags:說明該類的作用,參數(shù)是個數(shù)組,可以填多個。
- value="該參數(shù)沒什么意義,在UI界面上不顯示,所以不用配置"
- description = "用戶基本信息操作"
ApiOperation標記
用于請求的方法上表示一個http請求的操作
參數(shù):
- value用于方法描述
- notes用于提示內(nèi)容
- tags可以重新分組(視情況而用)
ApiParam標記
用于請求方法上對請求參數(shù),字段說明;表示對參數(shù)的添加元數(shù)據(jù)(說明或是否必填等)
參數(shù):
- name–參數(shù)名
- value–參數(shù)說明
- required–是否必填
ApiModel標記
用于java實體類上表示對類進行說明,用于參數(shù)用實體類接收
參數(shù):
- value–表示對象名
- description–描述
都可省略
ApiModelProperty標記
用于方法,字段; 表示對model屬性的說明或者數(shù)據(jù)操作更改
參數(shù):
- value–字段說明
- name–重寫屬性名字
- dataType–重寫屬性類型
- required–是否必填
- example–舉例說明
- hidden–隱藏
@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="狀態(tài)",name="state",required=true)
private Integer state;
private String password;
private String nickName;
private Integer isDeleted;
@ApiModelProperty(value="id數(shù)組",hidden=true)
private String[] ids;
private List<String> idList;
//省略get/set
}
ApiIgnore標記
用于請求類或者方法上,可以不被swagger顯示在頁面上
ApiImplicitParam標記
用于方法表示單獨的請求參數(shù)
ApiImplicitParams標記
用于方法,包含多個 @ApiImplicitParam
參數(shù):
- name–參數(shù)名
- value–參數(shù)說明
- dataType–數(shù)據(jù)類型
- paramType–參數(shù)類型
- example–舉例說明
@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(){
}
總結(jié)
- 可以給實體類和接口添加注釋信息
- 接口文檔實時更新
- 在線測試
- kinfe4j 在swagger API只做增強,不會改變原有任何使用,更多增加使用功能
到此這篇關(guān)于SpringBoot如何優(yōu)雅的整合Swagger Api自動生成文檔的文章就介紹到這了,更多相關(guān)SpringBoot整合Swagger Api內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作
這篇文章主要介紹了Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
SpringBoot JdbcTemplate批量操作的示例代碼
本篇文章主要介紹了SpringBoot JdbcTemplate批量操作的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
一篇文章帶你學(xué)習(xí)Mybatis-Plus(新手入門)
這篇文章主要介紹了MyBatis-Plus 快速入門案例(小白教程),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
java實現(xiàn)字符串like和not?like的使用示例
在Java中,我們經(jīng)常需要對字符串進行模式匹配操作,字符串的模式匹配通常使用like和not?like這兩個運算符進行,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下2023-09-09
java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)
這篇文章主要介紹了java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)的相關(guān)資料,這里提供了兩種在file尾部添加數(shù)據(jù)的方法,希望能幫助到大家,需要的朋友可以參考下2017-09-09

