关于SpringBoot整合Swagger2出现的问题综合及解决方案

一、Unable to infer base url的错误

错误信息如下:

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的配置文件

//@Configuration
//public class SwaggerConfiguration extends WebMvcConfigurerAdapter implements EnvironmentAware {
//  private String basePackage;
//  private String creatName;
//  private String serviceName;
//  private RelaxedPropertyResolver propertyResolver;
//  private String description;
//  /**
//   * 这个地方要重新注入一下资源文件,不然不会注入资源的,也没有注入requestHandlerMappping,相当于xml配置的
//   *  
//   *  
//   *  
//   *  不知道为什么,这也是spring boot的一个缺点(菜鸟觉得的)
//   * @param registry
//   */
//  @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/");
//  }
//
//
//
//  @Bean
//  public Docket createRestApi() {
//    return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
//      .select()
//      .apis(RequestHandlerSelectors.basePackage(this.basePackage))
//      .paths(PathSelectors.any()).build();
//  }
//
//  private ApiInfo apiInfo() {
//    return new ApiInfoBuilder()
//      .title(this.serviceName+" Restful APIs")
//      .description(this.description)
//      .contact(this.creatName).version("1.0").build();
//  }
//
//  @Override
//  public void setEnvironment(Environment environment) {
//    this.propertyResolver = new RelaxedPropertyResolver(environment, null);
//    this.basePackage = propertyResolver.getProperty("swagger.basepackage");
//    this.creatName = propertyResolver.getProperty("swagger.service.developer");
//    this.serviceName = propertyResolver.getProperty("swagger.service.name");
//    this.description = propertyResolver.getProperty("swagger.service.description");
//  }
//}

加上上述配置文件就OK。

小弟刚刚遇到的情况是这样的,我在项目中加了一个拦截器,拦截了地址,选择性的放行了包含swagger的uri;便出现了上述情况。

先解释一下原因。当访问swagger-ui.html时,html页面会发送四个请求:

1./swagger-resources/configuration/ui   获取页面UI配置信息

2./swagger-resources     

3./v2/api-docs        获取接口配置信息

4./swagger-resources/configuration/security     安全配置


所以在设置放行uri的时候需要同时放行/v2/api-docs这个uri,否则就会报错。

二、org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

关于SpringBoot整合Swagger2出现的问题综合及解决方案_第1张图片

这个原因是因为swagger配置文件中缺少了必要信息。关于SpringBoot整合Swagger2出现的问题综合及解决方案_第2张图片

例如,本例中是因为少写了controller所在的包。

三、swagger-ui.html中不出现任何信息。

如下图所示一样,

关于SpringBoot整合Swagger2出现的问题综合及解决方案_第3张图片


这主要是因为没有加上@EnableSwagger2这个注解。

三、接口详细参数测试页面无法显示

如下图所示:

关于SpringBoot整合Swagger2出现的问题综合及解决方案_第4张图片

点击GET方法的test接口,怎么也无法显示其中的接口参数信息。这个问题我曾经一度丈二和尚,摸不着头脑。

在认真观察错误后,终于发现了其中的猫腻。

关于SpringBoot整合Swagger2出现的问题综合及解决方案_第5张图片

主要是因为编码的问题,所以尽量不要在@Api中加上中文信息。@ApiOperation和@ApiParam这俩注解则问题不大。

改成英文之后便可以显示了。

关于SpringBoot整合Swagger2出现的问题综合及解决方案_第6张图片

你可能感兴趣的:(Spring,boot,swagger)