springboot整合swagger3报Unable to infer base url错误问题
作者:天国的囚徒
这篇文章主要介绍了springboot整合swagger3报Unable to infer base url错误问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
springboot整swagger3
工程中的pom文件加入依赖包
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>
代码中配置Swagger3Config
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.oas.annotations.EnableOpenApi; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; /** * 说明:Swagger 接口API生成 * 作者:wanghan */ @Configuration @EnableOpenApi public class Swagger3Config { @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.wanghan.ctrl")) // 为当前包路径 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Swagger3 RESTful API") // 页面标题 .version("3.0") // 版本号 .description("接口文档") // 描述 .build(); } }
Swagger 拦截配置
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * 说明:Swagger 拦截配置 * 作者:wanghan */ @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry. addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") .resourceChain(false); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/swagger-ui/") .setViewName("forward:/swagger-ui/index.html"); } }
至此swagger已经配置到你的项目中了。
可以通过url访问了:
http://localhost:8080/swagger-ui/index.html
总是不那么顺利
然而在使用过程中,总是出现这个那个问题:
问题一:提示没有权限访问
如果你使用安全框架,Swagger3的内置接口就会访问受限,我们需要排除掉。
Spring Security是这么配置的:
@Override public void configure(WebSecurity web) throws Exception { //忽略swagger3所需要用到的静态资源,允许访问 web.ignoring().antMatchers( "/swagger-ui.html", "/swagger-ui/**", "/swagger-resources/**", "/v2/api-docs", "/v3/api-docs", "/webjars/**"); }
或者你使用的版本是Spring Security 5.4,你可以这么定制WebSecurity
@Bean WebSecurityCustomizer swaggerWebSecurityCustomizer() { return (web) -> { web.ignoring().antMatchers(new String[]{"/swagger-ui.html", "/swagger-ui/**", "/swagger-resources/**", "/v2/api-docs", "/v3/api-docs", "/webjars/**"}); }; }
问题二:报Unable to infer base url
你会发现Swagger3会报Unable to infer base url的错误,这是因为统一返回体影响到了Swagger3的一些内置接口。
解决方法是
@RestControllerAdvice控制好生效的包范围,在你的实现类上加上basePackages = “项目包路径”
@ControllerAdvice(basePackages = "com.wanghan") public class ApiResBodyAdvice implements ResponseBodyAdvice { }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。