Springboot中整合knife4j接口文檔的過程詳解
在項目開發(fā)過程中,web項目的前后端分離開發(fā),APP開發(fā),需要由前端后端工程師共同定義接口,編寫接口文檔,之后大家都根據(jù)這個接口文檔進行開發(fā)。
什么是knife4j
簡單說knife4j就swagger的升級版API文檔的一個框架,但是用起來比swagger方便多了,UI更加豐富。
界面欣賞
主頁
接口文檔
調(diào)試界面
參數(shù)實體
整合 knife4j
引入 maven 依賴
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <!--在引用時請在maven中央倉庫搜索3.X最新版本號--> <version>3.0.3</version> </dependency>
knife4j 配置文件
創(chuàng)建 Knife4jConfig 文件
package com.didiplus.common.config; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; /** * Author: didiplus * Email: 972479352@qq.com * CreateTime: 2022/4/25 * Desc: knife4j 配置 */ @Configuration @EnableKnife4j public class Knife4jConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.didiplus")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("SpringBoot項目 后臺服務(wù)API接口文檔") .description("使用 knife4j 搭建的后臺服務(wù)API接口文檔") .termsOfServiceUrl("http://localhost:8080/") .contact("didiplus") .version("1.0.0") }
配置API接口
package com.didiplus.modules.sys.controller; import com.didiplus.modules.sys.domain.SysDictType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Author: didiplus * Email: 972479352@qq.com * CreateTime: 2022/4/25 * Desc: 數(shù)據(jù)字典控制器 */ @RestController @Api(tags = "數(shù)據(jù)字典") @RequestMapping("/api/sys/dictType") public class SysDictTypeController { @ApiOperation("添加") @PostMapping("/add") public SysDictType add() { SysDictType dictType = new SysDictType(); dictType.setId("1"); dictType.setTypeName("用戶狀態(tài)"); dictType.setTypeCode("user_type"); dictType.setDescription("用戶狀態(tài)"); dictType.setEnable("true"); return dictType; } }
通過 @Api
注解標(biāo)注需要生成接口文檔,通過 @ApiOperation
注解標(biāo)注接口名。 同時我們給 SysDictType
也加上對應(yīng)的注解
package com.didiplus.modules.sys.domain; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotEmpty; /** * Author: didiplus * Email: 972479352@qq.com * CreateTime: 2022/4/25 * Desc: 字典類型領(lǐng)域模型 */ @Data @ApiModel(value = "字典類型") public class SysDictType { @ApiModelProperty("ID") private String id; @NotEmpty(message = "字典編碼不能為空") @ApiModelProperty(name = "字典名稱",example = "用戶ID") private String typeName; @ApiModelProperty(value = "字典編碼") private String typeCode; @ApiModelProperty(value = "字典描述") private String description; @NotEmpty(message = "字典狀態(tài)不能為空") @ApiModelProperty(value = "字典狀態(tài)") private String enable; }
通過 @ApiModel
標(biāo)注這是一個參數(shù)實體,通過 @ApiModelProperty
標(biāo)注字段說明。
訪問 http://localhost:8080/doc.html體驗一下,出現(xiàn)訪問資源異常
出現(xiàn)這個問題的原因是因為我們加上了 ResponseBodyAdvice
統(tǒng)一處理返回值/響應(yīng)體,導(dǎo)致給Swagger的返回值也包裝了一層,UI頁面無法解析??梢酝ㄟ^ http://localhost:8080/v2/api-docs?group=SwaggerDemo觀察Swagger返回的json數(shù)據(jù)。
既然知道了問題原因那就很好解決了,我們只需要在ResponseBodyAdvice
處理類中只轉(zhuǎn)換我們自己項目的接口即可。
@RestControllerAdvice(basePackages = "com.didiplus.modules") public class ResponseAdvice implements ResponseBodyAdvice<Object> { ....省略.... }
詳細(xì)的可以參考SpringBoot 如何統(tǒng)一后端返回格式。通過添加basePackage
屬性限定統(tǒng)一返回值的范圍,這樣就不影Swagger
了 ,重啟服務(wù)器再次訪問swagger
接口地址,就可以看到接口文檔頁面了。
knife4j 常用特性
knife4j 在 swagger 的基礎(chǔ)上做了許多增強,這里介紹幾個最常用的。使用增強特性需在application.yml
中開啟 。
knife4j: production: false enable: true
全局參數(shù)
前后端分離開發(fā)中一般使用 token 作為請求參數(shù)進行身份與權(quán)限鑒定,有放在 query(表單)和 header(請求頭)的,knife4j 對這兩種都進行了支持,只需在側(cè)邊欄‘文檔管理 -> 全局參數(shù)設(shè)置’中設(shè)置。
離線文檔
有時我們需要一份離線文檔可以隨時隨地進行查看,knife4j 支持導(dǎo)出四種格式( md、html、doc 、json)的離線文檔,在側(cè)邊欄‘文檔管理 -> 離線文檔’中導(dǎo)出。
到此這篇關(guān)于Springboot中整合knife4j接口文檔的文章就介紹到這了,更多相關(guān)Springboot整合knife4內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot3集成Knife4j的步驟以及使用(最完整版)
- SpringBoot?Knife4j框架&Knife4j的顯示內(nèi)容的配置方式
- SpringBoot與knife4j的整合使用過程
- springboot讀取bootstrap配置及knife4j版本兼容性問題及解決
- springboot3整合knife4j詳細(xì)圖文教程(swagger增強)
- springboot整合knife4j全過程
- knife4j?整合?springboot的過程詳解
- SpringBoot中使用Knife4J的解決方案
- springboot集成swagger3與knife4j的詳細(xì)代碼
- knife4j+springboot3.4異常無法正確展示文檔
相關(guān)文章
Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法
遇到了個問題,同一天可以輸入多個時間段,但是每個時間段的時間不能出現(xiàn)重疊,這不就是判斷數(shù)據(jù)返回是否有重疊的變種嗎,所以本文給大家介紹了Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法,需要的朋友可以參考下2024-07-07JSON的String字符串與Java的List列表對象的相互轉(zhuǎn)換
這篇文章主要介紹了JSON的String字符串與Java的List列表對象的相互轉(zhuǎn)換,如果在瀏覽器端JSON是list則轉(zhuǎn)為string結(jié)構(gòu)來處理,需要的朋友可以參考下2016-04-04IDEA運行導(dǎo)入的javaweb項目tomcat正常,但是運行失敗404問題
這篇文章主要介紹了IDEA運行導(dǎo)入的javaweb項目tomcat正常但是運行失敗404問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07