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> {
....省略....
}詳細的可以參考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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Spring Boot輕松實現(xiàn)流式AI輸出的步驟
本文介紹了如何使用Spring Boot和WebFlux實現(xiàn)流式AI輸出,通過非阻塞I/O、反應(yīng)式編程和函數(shù)式路由等技術(shù),優(yōu)化了AI應(yīng)用的響應(yīng)速度,提升了用戶體驗,感興趣的朋友一起看看吧2025-02-02
Java Socket使用加密協(xié)議進行傳輸對象的方法
這篇文章主要介紹了Java Socket使用加密協(xié)議進行傳輸對象的方法,結(jié)合實例形式分析了java socket加密協(xié)議相關(guān)接口與類的調(diào)用方法,以及服務(wù)器、客戶端實現(xiàn)技巧,需要的朋友可以參考下2017-06-06
如何讓W(xué)in10實現(xiàn)Java文件的開機自啟動
這篇文章主要介紹了如何讓W(xué)in10實現(xiàn)Java文件的開機自啟動,對于一些想要一直運行的Java文件,就會造成每次系統(tǒng)更新之后的重啟導(dǎo)致Java文件無法繼續(xù)運行。,需要的朋友可以參考下2019-06-06
java spring整合junit操作(有詳細的分析過程)
這篇文章主要介紹了java spring整合junit操作(有詳細的分析過程),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
SpringBoot中@ConfigurationProperties自動獲取配置參數(shù)的流程步驟
當(dāng)需要獲取配置文件中很多參數(shù)時,我們可以定義參數(shù)的前綴相同,通過自動映射 進行獲取配置文件中參數(shù),所以本文給大家介紹了SpringBoot中@ConfigurationProperties自動獲取配置參數(shù)的流程步驟,需要的朋友可以參考下2024-11-11

