Swagger及knife4j的基本使用詳解
Swagger以及knife4j基本使用
Swagger 介紹:
官網(wǎng):https://swagger.io/
Swagger是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化RESTful風(fēng)格的 Web 服務(wù)
Restful 面向資源
RESTful是一種架構(gòu)的規(guī)范與約束、原則,符合這種規(guī)范的架構(gòu)就是RESTful架構(gòu)
Rest是web服務(wù)的一種架構(gòu)風(fēng)格;使用HTTP,URI,XML,JSON,HTML等廣泛流行的標(biāo)準(zhǔn)和協(xié)議;輕量級(jí),跨平臺(tái),跨語言的架構(gòu)設(shè)計(jì),它是一種設(shè)計(jì)風(fēng)格,不是一種標(biāo)準(zhǔn),是一種思想。
說明:
http方法 | 資源操作 | 冪等 | 安全 |
---|---|---|---|
GET | SELECT | 是 | 是 |
POST | INSERT | 否 | 否 |
PUT | UPDATE | 是 | 否 |
DELETE | DELETE | 是 | 否 |
冪等性:對(duì)同一REST接口多次訪問,得到的資源狀態(tài)是相同的
安全性:對(duì)該REST接口訪問,不會(huì)使服務(wù)端資源狀態(tài)發(fā)生改變
優(yōu)點(diǎn):
- 透明性 --暴露資源存在(資源操作通過http本身語義進(jìn)行描述,不用單獨(dú)描述)
- 充分利用HTTP協(xié)議本身語義
- 無狀態(tài) --在調(diào)用一個(gè)接口時(shí)可以不用考慮上下文,不用考慮當(dāng)前狀態(tài)降低了復(fù)雜度
- HTTP本身提供了豐富的內(nèi)容協(xié)商手段(緩存,資源修改的樂觀并發(fā)控制等可以通過與業(yè)務(wù)無關(guān)的中間件實(shí)現(xiàn))
SpringBoot使用swagger
- 導(dǎo)入依賴
- 2版本
<!--swagger依賴--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!--swagger ui--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
3.0版本
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>
2.編寫swagger配置文件
@Configuration @EnableSwagger2 //開啟Swagger2 public class Swagger2Config { /** * 創(chuàng)建API應(yīng)用 * apiInfo() 增加API相關(guān)信息 * 通過select()函數(shù)返回一個(gè)ApiSelectorBuilder實(shí)例,用來控制哪些接口暴露給Swagger來展現(xiàn), * 指定掃描的包路徑來定義指定要建立API的目錄。 * @return */ @Bean public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(adminApiInfo()) //.enable(false) //enable是否啟動(dòng)Swagger 如果為false,則swagger不能在瀏覽器中訪問 .groupName("adminApi") .select() //RequestHandlerSelectors 配置要掃描接口的方式 //basePackage: 指定要掃描的包 //any():掃描全部 //none()不掃描 //withClassAnnotation: 掃描類上的注解,參數(shù)為一個(gè)注解的反射對(duì)象 //withMethodeAnnotation: 掃描方法上的注解 .apis(RequestHandlerSelectors.basePackage("com.example.swagger.controller")) //只顯示admin下面的路徑 .paths(Predicates.and(PathSelectors.regex("/admin/.*"))) .build(); } private ApiInfo adminApiInfo(){ return new ApiInfoBuilder() .title("api文檔") .description("系統(tǒng)接口描述") .version("1.0") //作者信息 .contact(new Contact("張三","http://baidu.com","12345678@qq.com")) .build(); } }
3.編寫接口請(qǐng)求并運(yùn)行
訪問方式(本地):http://localhost:8080/swagger-ui.html
使用:
實(shí)體類:
@ApiModel("用戶實(shí)體類") public class User{ @ApiModelProperty("用戶名") public String username; }
接口方法,參數(shù):
@RestController public class UserController{ @ApiOperation("User控制類") @GetMapping(value="/user") public String getUser(@ApiParam("用戶名")String username){ return "名字為:"+username; } }
常用注解:
@Api:修飾整個(gè)類,描述Controller的作用,放在類上 @ApiOperation:描述一個(gè)類的一個(gè)方法,或者說一個(gè)接口 @ApiParam:單個(gè)參數(shù)描述 @ApiModel:用對(duì)象來接收參數(shù) @ApiProperty:用對(duì)象接收參數(shù)時(shí),描述對(duì)象的一個(gè)字段 @ApiResponses:HTTP響應(yīng)整體描述 @ApiResponse:HTTP響應(yīng)其中1個(gè)描述 @ApiIgnore:使用該注解忽略這個(gè)API @ApiError :發(fā)生錯(cuò)誤返回的信息 @ApiImplicitParams:描述由多個(gè) @ApiImplicitParam 注解的參數(shù)組成的請(qǐng)求參數(shù)列表 @ApiImplicitParam:描述一個(gè)請(qǐng)求參數(shù),可以配置參數(shù)的中文含義,還可以給參數(shù)設(shè)置默認(rèn)值 //eg: @ApiImplicitParam(name="username",value="用戶名",required=true)
Knife4j --Swagger增強(qiáng)工具
使用Knife4j2.06以上版本,springboot版本必須大于等于2.2.x
作用
- 可以搜索接口名稱快速定位接口(搜索功能)
- 可以下載markdown、HTML、word 等格式文件(下載功能)
1.引入依賴
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2.添加SwaggerConfiguration作為Swagger2的配置類
@Configuration @EnableSwagger2 @EnableKnife4j //@EnableSwagger2WebMvc 2.6以上報(bào)空指針異常則需要添加 @Import(BeanValidatorPluginsConfiguration.class) public class SwaggerConfiguration { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) // 選擇swagger2版本 .apiInfo(apiInfo()) //定義api文檔匯總信息 .select() .apis(RequestHandlerSelectors .basePackage("com.example")) // 指定生成api文檔的包 .paths(PathSelectors.any()) // 指定所有路徑 .build(); } /** * 構(gòu)建文檔api信息 * * @return */ private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("") // 文檔標(biāo)題 .contact(new Contact("", "", "")) //聯(lián)系人信息 .description("") //描述 .version("1.0.1") //文檔版本號(hào) .termsOfServiceUrl("") //網(wǎng)站地址 .build(); } }
3.實(shí)現(xiàn)生產(chǎn)環(huán)境關(guān)閉文檔資源
spring: profiles: prod #指定環(huán)境 knife4j: production: true #開啟屏蔽文檔資源
4.實(shí)現(xiàn)接口排序
- 針對(duì)不同Controller排序:Controller上標(biāo)注
@ApiSupport(order = 序號(hào))
- 針對(duì)同一個(gè)Controller中的不同方法排序:同一個(gè)Controller不同接口方法上標(biāo)注
@ApiOperationSupport(order = 序號(hào))
注:更多詳細(xì)配置:swagger文檔增強(qiáng)工具knife4j使用詳解
到此這篇關(guān)于Swagger以及knife4j的基本使用的文章就介紹到這了,更多相關(guān)Swagger knife4j使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用RedisTemplate操作Redis遇到的坑
這篇文章主要介紹了Java使用RedisTemplate操作Redis遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12java實(shí)現(xiàn)簡單的驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單的驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04詳解Reactor如何優(yōu)雅Exception異常處理
初識(shí)響應(yīng)式編程的時(shí)候,除了從命令式的思維方式轉(zhuǎn)變?yōu)楹瘮?shù)式的編程方式外,其中有一個(gè)很大的不適應(yīng)的地方就是在面對(duì)異常時(shí)該怎么處理。本文將通過Project?Reactor的文檔以及源碼來深入解讀,在reactor中是如何優(yōu)雅地實(shí)現(xiàn)這異常處理三板斧,希望對(duì)大家有所幫助2023-02-02Java實(shí)現(xiàn)數(shù)據(jù)更新和事件通知的觀察者模式
Java觀察者模式是一種行為型設(shè)計(jì)模式,用于實(shí)現(xiàn)對(duì)象間的一對(duì)多依賴關(guān)系。當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),它的所有依賴對(duì)象都會(huì)收到通知并自動(dòng)更新。觀察者模式可以實(shí)現(xiàn)松耦合,增強(qiáng)了系統(tǒng)的可維護(hù)性和可拓展性2023-04-04關(guān)于網(wǎng)頁報(bào)錯(cuò)404原因以及解決方法
404錯(cuò)誤是網(wǎng)站常見的錯(cuò)誤之一,出現(xiàn)的原因很多,解決方法也有很多種,這篇文章主要給大家介紹了關(guān)于網(wǎng)頁報(bào)錯(cuò)404原因以及解決方法的相關(guān)資料,需要的朋友可以參考下2024-01-01ElasticSearch學(xué)習(xí)之Es集群Api操作示例
這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之Es集群Api操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01巧用FutureTask 線程池輕松解決接口超時(shí)問題
這篇文章主要為大家介紹了使用FutureTask結(jié)合線程池輕松解決接口超時(shí)問題的巧妙用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11java中實(shí)現(xiàn)創(chuàng)建目錄與創(chuàng)建文件的操作實(shí)例
用Java創(chuàng)建文件或目錄非常簡單,下面這篇文章主要給大家介紹了關(guān)于java中實(shí)現(xiàn)創(chuàng)建目錄與創(chuàng)建文件的操作實(shí)例,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01