【问题标题】:Remove Basic Error Controller In SpringFox SwaggerUI删除 SpringFox SwaggerUI 中的基本错误控制器
【发布时间】:2016-01-01 17:09:45
【问题描述】:

有没有办法可以从 springfox swagger-ui 中删除“基本错误控制器”?

图片:

【问题讨论】:

    标签: swagger-ui swagger-2.0 springfox


    【解决方案1】:

    您可以限制请求处理程序选择器仅扫描您项目的包:

        return new Docket( DocumentationType.SWAGGER_2)
            .select()
            .apis( RequestHandlerSelectors.basePackage( "your package" ) )
            ...
    

    【讨论】:

    • 对于不熟悉“您的包裹”的填写内容的任何人,它是java下方的文件夹名称
    • 这不是必需的。有时,当只有看起来不像真正价值的文本时,不清楚某人的意思。此外,即使他们可能通过阅读文档或代码就知道了,但并不是每个人都像你一样了不起。
    • 为什么还要添加基本的错误控制器?是不是因为没有控制器可以大摇大摆地显示一些东西?
    【解决方案2】:

    我认为,最优雅的解决方案是仅将 @RestController 控制器包含在 swagger 中,唯一需要记住的是,使用该注释对所有 REST 控制器进行注释:

    new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .paths(PathSelectors.any())
                .build();
    

    由于BasicErrorController 仅使用@Controller 进行注释,因此swagger 将避免在定义文件中使用BasicErrorController。当然,您可以使用自定义注释而不是 @RestController 将您的 REST 控制器标记为符合 swagger 条件的控制器。

    【讨论】:

      【解决方案3】:
      • 可以使用 Predicate.not() 来完成。

         @Bean
         public Docket api() {
             return new Docket(DocumentationType.SWAGGER_2)
                 .select()
                 .apis(RequestHandlerSelectors.any())
                 .paths(PathSelectors.any())
                 .paths(Predicate.not(PathSelectors.regex("/error.*")))
                 .build();
         }
        

      【讨论】:

        【解决方案4】:

        例如,如果您的父包是 com.app.microservice

        package com.app.microservice;
        

        然后使用下面的代码它只会显示包内的控制器并禁用/排除其他控制器

        @Configuration
        @EnableSwagger2
        public class SwaggerConfig {
        
            @Bean
            public Docket api() {
                return new Docket(DocumentationType.SWAGGER_2)
                        .select()
                        .apis(RequestHandlerSelectors.basePackage("com.app.microservice"))
                        .build();
            }
        
        

        【讨论】:

          【解决方案5】:

          U也可以使用springfox-swagger2注解。 springfox.documentation.annotations.ApiIgnore

          @ApiIgnore
          public class ErrorController {
          

          这将从文档中排除该类。

          【讨论】:

          • BasicErrorController 是库函数,所以不容易用@ApiIgnore注解
          【解决方案6】:

          这可以通过将@Bean 定义移动到主类(带有@SpringBootApplication 的类)并在basePackage() 中使用其this.getClass().getPackageName() 来完成:

          @Bean
          public Docket swagger() {
              return new Docket(DocumentationType.SWAGGER_2)
                      .select()
                      .apis(RequestHandlerSelectors.basePackage(this.getClass().getPackageName()))
                      .paths(PathSelectors.any())
                      .build()
                      .useDefaultResponseMessages(false);
          }
          

          【讨论】:

            【解决方案7】:

            我的问题是我忘了用@Bean 注释 Docket api() 方法。

            【讨论】:

              【解决方案8】:

              在尝试了很多解决方案之后,对我来说没有任何效果。最后我知道了最基本的事情,即确保你定义了 swagger 配置文件和你的主要方法文件的文件应该在 同一个包 .

              @Bean
              public Docket api() {
              return new Docket(DocumentationType.SWAGGER_2)
                  .select()
                  .apis(RequestHandlerSelectors.any())
                  .paths(PathSelectors.any())
                  .paths(Predicates.not(PathSelectors.regex("/error.*")))
                  .build();
              }
              

              Please check this image

              【讨论】:

              • 即使它们在不同的包中也可以正常工作。这些与您发布的限制不同。
              • 如果你的配置bean文件在不同的包中,那么你必须在你的main方法上使用@componentScan("base-package")注解。
              • 我们也可以使用“import”注解,以便在主类中导入SwaggerConfig类。
              猜你喜欢
              • 2015-01-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-11
              • 2017-04-10
              相关资源
              最近更新 更多