Springboot中整合knife4j接口文檔的過程詳解
在項(xiàng)目開發(fā)過程中,web項(xiàng)目的前后端分離開發(fā),APP開發(fā),需要由前端后端工程師共同定義接口,編寫接口文檔,之后大家都根據(jù)這個(gè)接口文檔進(jìn)行開發(fā)。
什么是knife4j
簡(jiǎn)單說knife4j就swagger的升級(jí)版API文檔的一個(gè)框架,但是用起來比swagger方便多了,UI更加豐富。
界面欣賞
主頁(yè)
接口文檔
調(diào)試界面
參數(shù)實(shí)體
整合 knife4j
引入 maven 依賴
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <!--在引用時(shí)請(qǐng)?jiān)趍aven中央倉(cāng)庫(kù)搜索3.X最新版本號(hào)--> <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項(xiàng)目 后臺(tái)服務(wù)API接口文檔") .description("使用 knife4j 搭建的后臺(tái)服務(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)注接口名。 同時(shí)我們給 SysDictType
也加上對(duì)應(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)注這是一個(gè)參數(shù)實(shí)體,通過 @ApiModelProperty
標(biāo)注字段說明。
訪問 http://localhost:8080/doc.html體驗(yàn)一下,出現(xiàn)訪問資源異常
出現(xiàn)這個(gè)問題的原因是因?yàn)槲覀兗由狭?code> ResponseBodyAdvice統(tǒng)一處理返回值/響應(yīng)體,導(dǎo)致給Swagger的返回值也包裝了一層,UI頁(yè)面無法解析。可以通過 http://localhost:8080/v2/api-docs?group=SwaggerDemo觀察Swagger返回的json數(shù)據(jù)。
既然知道了問題原因那就很好解決了,我們只需要在ResponseBodyAdvice
處理類中只轉(zhuǎn)換我們自己項(xiàng)目的接口即可。
@RestControllerAdvice(basePackages = "com.didiplus.modules") public class ResponseAdvice implements ResponseBodyAdvice<Object> { ....省略.... }
詳細(xì)的可以參考SpringBoot 如何統(tǒng)一后端返回格式。通過添加basePackage
屬性限定統(tǒng)一返回值的范圍,這樣就不影Swagger
了 ,重啟服務(wù)器再次訪問swagger
接口地址,就可以看到接口文檔頁(yè)面了。
knife4j 常用特性
knife4j 在 swagger 的基礎(chǔ)上做了許多增強(qiáng),這里介紹幾個(gè)最常用的。使用增強(qiáng)特性需在application.yml
中開啟 。
knife4j: production: false enable: true
全局參數(shù)
前后端分離開發(fā)中一般使用 token 作為請(qǐng)求參數(shù)進(jìn)行身份與權(quán)限鑒定,有放在 query(表單)和 header(請(qǐng)求頭)的,knife4j 對(duì)這兩種都進(jìn)行了支持,只需在側(cè)邊欄‘文檔管理 -> 全局參數(shù)設(shè)置’中設(shè)置。
離線文檔
有時(shí)我們需要一份離線文檔可以隨時(shí)隨地進(jìn)行查看,knife4j 支持導(dǎo)出四種格式( md、html、doc 、json)的離線文檔,在側(cè)邊欄‘文檔管理 -> 離線文檔’中導(dǎo)出。
到此這篇關(guān)于Springboot中整合knife4j接口文檔的文章就介紹到這了,更多相關(guān)Springboot整合knife4內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot3集成Knife4j的步驟以及使用(最完整版)
- SpringBoot?Knife4j框架&Knife4j的顯示內(nèi)容的配置方式
- SpringBoot與knife4j的整合使用過程
- springboot讀取bootstrap配置及knife4j版本兼容性問題及解決
- springboot3整合knife4j詳細(xì)圖文教程(swagger增強(qiáng))
- springboot整合knife4j全過程
- knife4j?整合?springboot的過程詳解
- SpringBoot中使用Knife4J的解決方案
- springboot集成swagger3與knife4j的詳細(xì)代碼
- knife4j+springboot3.4異常無法正確展示文檔
相關(guān)文章
Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法
遇到了個(gè)問題,同一天可以輸入多個(gè)時(shí)間段,但是每個(gè)時(shí)間段的時(shí)間不能出現(xiàn)重疊,這不就是判斷數(shù)據(jù)返回是否有重疊的變種嗎,所以本文給大家介紹了Java判斷范圍型的數(shù)據(jù)是否存在重疊的方法,需要的朋友可以參考下2024-07-07SpringBoot之Java配置的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot之Java配置的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01Java servlet執(zhí)行流程代碼實(shí)例
這篇文章主要介紹了Java servlet執(zhí)行流程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換
這篇文章主要介紹了JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換,如果在瀏覽器端JSON是list則轉(zhuǎn)為string結(jié)構(gòu)來處理,需要的朋友可以參考下2016-04-04IDEA運(yùn)行導(dǎo)入的javaweb項(xiàng)目tomcat正常,但是運(yùn)行失敗404問題
這篇文章主要介紹了IDEA運(yùn)行導(dǎo)入的javaweb項(xiàng)目tomcat正常但是運(yùn)行失敗404問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07