我們在使用SpringBoot
集成Swagger2
中,訪問:http://localhost/swagger-ui.html
出現問題,頁面顯示默認報錯頁面。後臺報錯:
No mapping found for HTTP request with URI [/swagger-ui.html] in DispatcherServlet with name ‘dispatcherServlet’
解決方案
這個錯誤,是因爲靜態資源路徑映射問題導致。
我們在訪問http://localhost/swagger-ui.html
時,這個swagger-ui.html
相關的所有前端靜態文件都在springfox-swagger-ui-2.4.0.jar
裏面。目錄如下:
SpringBoot
自動配置本身並不會把/swagger-ui.html
這個路徑映射到對應的目錄META-INF/resources/
下面。我們加上這個映射即可。構建一個WebMvcConfig
類,代碼如下:
package com.demo;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
需要特別說明一下的是,Swagger2.java
這個類一定要配置正確。
package com.demo;
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
public class Swagger2 {
/**
* @Description:swagger2的配置文件,這裏可以配置swagger2的一些基本的內容,比如掃描的包等等
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(RequestHandlerSelectors.basePackage("com.demo.controller"))
.paths(PathSelectors.any()).build();
}
/**
* @Description: 構建api文檔的信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 設置頁面標題
.title("標題")
// 設置聯繫人
.contact(
new Contact("暱稱", "網址鏈接", "郵箱"))
// 描述
.description("描述信息")
// 定義版本號
.version("版本號").build();
}
}