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),跨語(yǔ)言的架構(gòu)設(shè)計(jì),它是一種設(shè)計(jì)風(fēng)格,不是一種標(biāo)準(zhǔn),是一種思想。
說(shuō)明:
| http方法 | 資源操作 | 冪等 | 安全 |
|---|---|---|---|
| GET | SELECT | 是 | 是 |
| POST | INSERT | 否 | 否 |
| PUT | UPDATE | 是 | 否 |
| DELETE | DELETE | 是 | 否 |
冪等性:對(duì)同一REST接口多次訪(fǎng)問(wèn),得到的資源狀態(tài)是相同的
安全性:對(duì)該REST接口訪(fǎng)問(wèn),不會(huì)使服務(wù)端資源狀態(tài)發(fā)生改變
優(yōu)點(diǎn):
- 透明性 --暴露資源存在(資源操作通過(guò)http本身語(yǔ)義進(jìn)行描述,不用單獨(dú)描述)
- 充分利用HTTP協(xié)議本身語(yǔ)義
- 無(wú)狀態(tài) --在調(diào)用一個(gè)接口時(shí)可以不用考慮上下文,不用考慮當(dāng)前狀態(tài)降低了復(fù)雜度
- HTTP本身提供了豐富的內(nèi)容協(xié)商手段(緩存,資源修改的樂(lè)觀并發(fā)控制等可以通過(guò)與業(yè)務(wù)無(wú)關(guān)的中間件實(shí)現(xiàn))
SpringBoot使用swagger
- 導(dǎo)入依賴(lài)
- 2版本
<!--swagger依賴(lài)--> <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.編寫(xiě)swagger配置文件
@Configuration
@EnableSwagger2 //開(kāi)啟Swagger2
public class Swagger2Config {
/**
* 創(chuàng)建API應(yīng)用
* apiInfo() 增加API相關(guān)信息
* 通過(guò)select()函數(shù)返回一個(gè)ApiSelectorBuilder實(shí)例,用來(lái)控制哪些接口暴露給Swagger來(lái)展現(xiàn),
* 指定掃描的包路徑來(lái)定義指定要建立API的目錄。
* @return
*/
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(adminApiInfo())
//.enable(false) //enable是否啟動(dòng)Swagger 如果為false,則swagger不能在瀏覽器中訪(fǎng)問(wèn)
.groupName("adminApi")
.select()
//RequestHandlerSelectors 配置要掃描接口的方式
//basePackage: 指定要掃描的包
//any():掃描全部
//none()不掃描
//withClassAnnotation: 掃描類(lèi)上的注解,參數(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.編寫(xiě)接口請(qǐng)求并運(yùn)行
訪(fǎng)問(wèn)方式(本地):http://localhost:8080/swagger-ui.html
使用:
實(shí)體類(lèi):
@ApiModel("用戶(hù)實(shí)體類(lèi)")
public class User{
@ApiModelProperty("用戶(hù)名")
public String username;
}接口方法,參數(shù):
@RestController
public class UserController{
@ApiOperation("User控制類(lèi)")
@GetMapping(value="/user")
public String getUser(@ApiParam("用戶(hù)名")String username){
return "名字為:"+username;
}
}常用注解:
@Api:修飾整個(gè)類(lèi),描述Controller的作用,放在類(lèi)上
@ApiOperation:描述一個(gè)類(lèi)的一個(gè)方法,或者說(shuō)一個(gè)接口
@ApiParam:?jiǎn)蝹€(gè)參數(shù)描述
@ApiModel:用對(duì)象來(lái)接收參數(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="用戶(hù)名",required=true)Knife4j --Swagger增強(qiáng)工具
使用Knife4j2.06以上版本,springboot版本必須大于等于2.2.x
作用
- 可以搜索接口名稱(chēng)快速定位接口(搜索功能)
- 可以下載markdown、HTML、word 等格式文件(下載功能)
1.引入依賴(lài)
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.9</version>
</dependency>2.添加SwaggerConfiguration作為Swagger2的配置類(lèi)
@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 #開(kāi)啟屏蔽文檔資源
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線(xiàn)程的run()沒(méi)有返回值怎么辦?
java線(xiàn)程的run()沒(méi)有返回值怎么辦?本文給出了java線(xiàn)程的run()返回值為空的解決辦法,感興趣的小伙伴們可以參考一下2016-01-01
Java List移除相應(yīng)元素的超簡(jiǎn)潔寫(xiě)法分享
這篇文章主要介紹了Java List移除相應(yīng)元素的超簡(jiǎn)潔寫(xiě)法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
快速解決跨域請(qǐng)求問(wèn)題:jsonp和CORS
這篇文章主要介紹了快速解決跨域請(qǐng)求問(wèn)題:jsonp和CORS,涉及jsonp和CORS的介紹,分享了前端 jQuery 寫(xiě)法,后端 SpringMVC 配置,后端非 SpringMVC 配置等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11
Java利用InputStream類(lèi)實(shí)現(xiàn)文件讀取與處理
在Java開(kāi)發(fā)中,輸入流(InputStream)是一個(gè)非常重要的概念,它涉及到文件讀寫(xiě)、網(wǎng)絡(luò)傳輸?shù)榷鄠€(gè)方面,InputStream類(lèi)是Java中輸入流的抽象基類(lèi),定義了讀取輸入流數(shù)據(jù)的方法,本文將以InputStream類(lèi)為切入點(diǎn),介紹Java中的輸入流概念及其應(yīng)用,需要的朋友可以參考下2023-11-11
一文掌握Spring Cookie和Session 是什么及區(qū)別介紹
Cookie和Session都是用于在客戶(hù)端和服務(wù)器之間傳遞信息的技術(shù),但它們的工作方式和使用場(chǎng)景有所不同,Cookie是在客戶(hù)端保存用戶(hù)信息的一種機(jī)制,而Session是在服務(wù)器端保存用戶(hù)信息的一種機(jī)制,本文介紹Spring Cookie和Session 是什么,感興趣的朋友一起看看吧2025-01-01

