日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot 基础教程:集成 Knife4j

發(fā)布時間:2023/12/8 javascript 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot 基础教程:集成 Knife4j 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

之前介紹了如何在 Spring Boot 中集成 Swagger2 和 Swagger3,對于我們日常的接口管理已經(jīng)夠用了。但是作為一個顏值黨,無論是 Swagger2 還是 Swagger3,都難以滿足我們的審美。而且 Swagger2 和 Swagger3 都已經(jīng)好久沒更新了,更新還是比較慢的。

偶然之間發(fā)現(xiàn)了一個國產的接口文檔管理工具 Knife4j,它基于 Swagger 而來,但是又對 Swagger 進行了增強,增加兩個越來越多的個性化需求,可以說兼具顏值與實力了。今天我們就來看看,如何在 Spring Boot 中集成 Knife4j 這個接口文檔管理工具。

集成過程

創(chuàng)建 Spring Boot 項目

既然要在 Spring Boot 中使用 Knife4j,那首先就得創(chuàng)建一個 Spring Boot 項目。當然,我在之前已經(jīng)寫過文章介紹如何創(chuàng)建 Spring Boot 項目了,所以這里不再贅述。如果你還對 Spring Boot 創(chuàng)建方式不太熟悉,可以參考我之前的文章:Spring Boot 基礎教程:創(chuàng)建項目的 3 種方式 | JavaPark

添加依賴

既然是用 Maven 來管理項目依賴,那我們在項目 pom.xml 中引入 Knife4j 的相關依賴包,引入代碼如下。

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version> </dependency>

配置添加

接著在項目中創(chuàng)建一個配置包 config,用于配置 Swagger 的配置依賴。在這里可以配置掃描的 controller 所在的包,設置接口文檔的標題、描述、作者信息等。

這里其實和 Swagger2 和 Swagger3 很相似,Swagger 也是可以通過配置類來指定這些信息。

package com.cunyu.springbootknife4jdemo.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.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration @EnableSwagger2 @EnableKnife4j public class Knife4jConfiguration {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false).apiInfo(apiInfo()).select() .apis(RequestHandlerSelectors.basePackage("com.cunyu.springbootknife4jdemo.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().description("Kinfe4j 集成測試文檔").contact(new Contact("村雨遙", "https://cunyu.gitub.io/JavaPark", "747731461@qq.com")).version("v1.1.0").title("API測試文檔").build();}}

編寫 Controller 層

接著我們編寫一個測試的 controller,用于在 Knife4j 中展示用,代碼如下。

@Api(tags = "測試模塊") @RestController public class DemoController {@ApiImplicitParam(name = "name", value = "姓名", required = true)@ApiOperation(value = "入門程序,Hello World")@PostMapping("/helloWorld")public ResponseEntity<String> helloWorld(@RequestParam(value = "name") String name) {return ResponseEntity.ok("Hello World," + name);} }

啟動測試

然后將項目啟動起來,接著到瀏覽器中去打開 http://localhost:8080/doc.html,就會出現(xiàn)以下的主界面。這里有我們之前在配置類中所設置的一些接口信息,此外,還對接口進行了統(tǒng)計。因為我們代碼中只寫了一個 POST 的請求,所以這里統(tǒng)計出只有一個 POST 請求。

打開具體接口,這里就有我們接口的請求和響應的一些情況說明。

點擊左側 調試 按鈕,我們就可以在 Knife4j 中測試我們的接口。

踩過的坑

當然,如果你按照以上步驟順利打開了 Knife4j 的文檔管理頁面,那接下來的內容你大可不必了解。但如果你按照上邊步驟搭建過程中也出現(xiàn)了問題,那不妨看看以下是否有你遇到的 Bug。

空指針異常

首先是報空指針異常,報錯信息如下。

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

經(jīng)過查詢資料可知,這是因為 Springfox 使用的路徑匹配是基于 AntPathMatcher 的,但是由于我使用的是 Spring Boot 2.6.x 版本,正好這個版本使用的是 PathPatternMatcher,所以才會出現(xiàn)這個問題。所以這里主要可以通過兩種方式來解決。

第一種,無可厚非,就是將我們的 Spring Boot 的版本降低,從 2.6.x 降到 2.5.x,此時就應該是可以了,這里可以自己去試一下。

第二種,既然我們都已經(jīng)用上 2.6.x 版本了,那我們就是不想降低版本咋整。此時,我們只需要在主程序啟動類中加上 @EnableWebMvc 這個注解。然后再次啟動程序,你就會發(fā)現(xiàn)啟動成功了!

@EnableWebMvc @SpringBootApplication public class SpringbootKnife4jDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootKnife4jDemoApplication.class, args);} }

請求路徑未找到

一山放過一山攔,以為翻過了上面的山,就能成功了。沒想到出師不利,這不又遇到了報錯請求路徑未找到。

當我們成功啟動項目后,在瀏覽器中打開 http://localhost:8080/doc.html,卻沒想到迎接我們的不是成功界面,而是下面的 Whitelabel Error Page。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DMP0RV4z-1651224417803)(https://cdn.jsdelivr.net/gh/cunyu1943/blog-imgs@main/2022/04/image-20220429170230515.png)]

然后到 IDEA 中一看日志,程序照常運行,也沒報錯,但是給我們拋出了一個 WARN,警告信息如下:

No mapping for GET /doc.html

這是因為我們?yōu)榱私鉀Q上面的 Bug 而使用到了 @EnableWebMvc,由于它實現(xiàn)了 WebMvcConfigurer 接口,所以會導致我們訪問識別。

這時候問題就來了,上面又需要這個注解,但是下面這個問題又不需要,那該怎么辦呢?

其實很簡單,既然我們要保留 @EnableWebMvc,那我們去配置個規(guī)則不就好了。

在項目的 config 包下,我們新建一個配置類 WebMvcConfigurer 記成 WebMvcConfigurationSupport 類,接著將 dom.html 過濾掉即可。

@Configuration public class WebMvcConfigurer extends WebMvcConfigurationSupport {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");super.addResourceHandlers(registry);} }

完成上述配置后,再去運行項目,再到瀏覽器中去訪問 http://localhost:8080/doc.html 應該就能正常訪問 Knife4j 文檔管理頁面了。

總結

以上就是 Spring Boot 中集成 Knife4j 文檔管理工具的內容了,這里主要講了下如何集成并且進行一個最簡單的接口調試,關于更多 Knife4j 的個性化功能,可以去它的官網(wǎng)了解下。

此外,對于文中集成是所遇到的 Bug,如果你沒有遇到,那么你應該順利集成了,如果你也有遇到,那么不妨跟著我去試一下解決的辦法。

最后的最后,關于本文中所涉及的代碼,我已經(jīng)開源了,有需要到小伙伴可以去自取哦。

springboot-knife4j-demo

總結

以上是生活随笔為你收集整理的Spring Boot 基础教程:集成 Knife4j的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。