关于spring springMVC整合swagger2 Unable to infer base url. This is common when using dynamic servlet...

在spring springMVC整合swagger2,完成访问swagger-ui.html的时候出现

Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/. Please enter the location manually:

其实出现这个可能有不少原因:但是最可能的是因为访问swagger-ui.html的时候,swagger-ui.html还会向你的服务器发出4个请求,请求你的相关信息,也就是你的controller包下的controller相关内容,这4个请求报了404所以弹出这个。

大部分人出现这个是因为springMVC的过滤原则设置的是*.do或者是*.xxx其它,但是swagger-ui.html的这4个请求是不带.xxx结尾的,所以最简单解决方案:修改springMVC配置:加一个带/的配置,修改之后可能其它的会冲突了,那也只能你自己去改,自己的项目,毕竟自己最了解。

其中的一个:这个作用是可以访问swagger2的静态资源,也可以设置加在springMVC配置中:下面的2个选一个。

xml配置中:

                  location="classpath*:/META-INF/resources/webjars/" />
                            location="classpath*:/META-INF/resources/" />

类:


import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
public class WebAppConfig 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/");
        
    }
}
@Configuration
@EnableWebMvc
@EnableSwagger2
public class SwaggerConfig {
	
	@Bean    
	public Docket api() {        
	return new Docket(DocumentationType.SWAGGER_2)
		.apiInfo(apiInfo())
	    .select()
	    .apis(RequestHandlerSelectors.basePackage("com.**.controller"))//这个是必须的:指定你的controller包
	    .paths(PathSelectors.any())//过滤规则:swagger所有的访问都可以,否则被访问被限制了也会出现上述原因:这个我没有出现参考的别人:没测试过。
	    .build();
	    }   
	private ApiInfo apiInfo() {        
	        return new ApiInfoBuilder()
	        .title("对外开放接口API文档")
	        .description("HTTP对外开放接口")
	        .version("2.6.1")
	        .termsOfServiceUrl("http://localhost:8080/")
//	        .license("nastmm")
//	        .licenseUrl("http://127.0.0.1:8080/")
	        .build();
	    }
}

 

你可能感兴趣的:(swagger相关)