這篇文章主要講解了“Spring Boot集成接口管理工具Knife4j怎么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring Boot集成接口管理工具Knife4j怎么用”吧!
既然要在 Spring Boot 中使用 Knife4j,那首先就得創建一個 Spring Boot 項目。當然,我在之前已經寫過文章介紹如何創建 Spring Boot 項目了,所以這里不再贅述。如果你還對 Spring Boot 創建方式不太熟悉,可以參考我之前的文章:Spring Boot 教程之創建項目的三種方式
既然是用 Maven 來管理項目依賴,那我們在項目 pom.xml 中引入 Knife4j 的相關依賴包,引入代碼如下。
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
接著在項目中創建一個配置包 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 {
@Bean
public 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())
.version("v1.1.0")
.title("API測試文檔")
.build();
}
}接著我們編寫一個測試的 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,就會出現以下的主界面。這里有我們之前在配置類中所設置的一些接口信息,此外,還對接口進行了統計。因為我們代碼中只寫了一個 POST 的請求,所以這里統計出只有一個 POST 請求。
打開具體接口,這里就有我們接口的請求和響應的一些情況說明。
點擊左側 調試 按鈕,我們就可以在 Knife4j 中測試我們的接口。
當然,如果你按照以上步驟順利打開了 Knife4j 的文檔管理頁面,那接下來的內容你大可不必了解。但如果你按照上邊步驟搭建過程中也出現了問題,那不妨看看以下是否有你遇到的 Bug。
首先是報空指針異常,報錯信息如下。
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
經過查詢資料可知,這是因為 Springfox 使用的路徑匹配是基于 AntPathMatcher 的,但是由于我使用的是 Spring Boot 2.6.x 版本,正好這個版本使用的是 PathPatternMatcher,所以才會出現這個問題。所以這里主要可以通過兩種方式來解決。
第一種,無可厚非,就是將我們的 Spring Boot 的版本降低,從 2.6.x 降到 2.5.x,此時就應該是可以了,這里可以自己去試一下。
第二種,既然我們都已經用上 2.6.x 版本了,那我們就是不想降低版本咋整。此時,我們只需要在主程序啟動類中加上 @EnableWebMvc 這個注解。然后再次啟動程序,你就會發現啟動成功了!
@EnableWebMvc
@SpringBootApplication
public class SpringbootKnife4jDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootKnife4jDemoApplication.class, args);
}
}一山放過一山攔,以為翻過了上面的山,就能成功了。沒想到出師不利,這不又遇到了報錯請求路徑未找到。
當我們成功啟動項目后,在瀏覽器中打開 http://localhost:8080/doc.html,卻沒想到迎接我們的不是成功界面,而是下面的 Whitelabel Error Page。
然后到 IDEA 中一看日志,程序照常運行,也沒報錯,但是給我們拋出了一個 WARN,警告信息如下:
No mapping for GET /doc.html
這是因為我們為了解決上面的 Bug 而使用到了 @EnableWebMvc,由于它實現了 WebMvcConfigurer 接口,所以會導致我們訪問識別。
這時候問題就來了,上面又需要這個注解,但是下面這個問題又不需要,那該怎么辦呢?
其實很簡單,既然我們要保留 @EnableWebMvc,那我們去配置個規則不就好了。
在項目的 config 包下,我們新建一個配置類 WebMvcConfigurer 記成 WebMvcConfigurationSupport 類,接著將 dom.html 過濾掉即可。
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {
@Override
public 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怎么用”的內容了,經過本文的學習后,相信大家對Spring Boot集成接口管理工具Knife4j怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。