删除 SpringFox SwaggerUI 中的基本错误控制器
Remove Basic Error Controller In SpringFox SwaggerUI
有没有办法从 springfox swagger-ui 中删除 "basic-error-controller"?
图片:
您可以限制请求处理程序选择器只扫描您项目的包:
return new Docket( DocumentationType.SWAGGER_2)
.select()
.apis( RequestHandlerSelectors.basePackage( "your package" ) )
...
你也可以使用springfox-swagger2注解。 springfox.documentation.annotations.ApiIgnore
@ApiIgnore
public class ErrorController {
这将从文档中排除 class。
可以使用 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();
}
我认为,最优雅的解决方案是仅将 @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 合格的控制器。
在尝试了很多解决方案之后,没有一个对我有用。最后,我了解了最基本的事情,即确保您在其中定义 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
例如,如果您的父包是 com.app.microservice
package com.app.microservice;
然后使用下面的代码,它将只显示包中的控制器和 disable/exclude 其他
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.app.microservice"))
.build();
}
这可以通过将 @Bean
定义移动到主 class(带有 @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);
}
我的问题是我忘了用@Bean 注释 Docket api() 方法。
有没有办法从 springfox swagger-ui 中删除 "basic-error-controller"?
图片:
您可以限制请求处理程序选择器只扫描您项目的包:
return new Docket( DocumentationType.SWAGGER_2)
.select()
.apis( RequestHandlerSelectors.basePackage( "your package" ) )
...
你也可以使用springfox-swagger2注解。 springfox.documentation.annotations.ApiIgnore
@ApiIgnore
public class ErrorController {
这将从文档中排除 class。
可以使用 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(); }
我认为,最优雅的解决方案是仅将 @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 合格的控制器。
在尝试了很多解决方案之后,没有一个对我有用。最后,我了解了最基本的事情,即确保您在其中定义 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
例如,如果您的父包是 com.app.microservice
package com.app.microservice;
然后使用下面的代码,它将只显示包中的控制器和 disable/exclude 其他
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.app.microservice"))
.build();
}
这可以通过将 @Bean
定义移动到主 class(带有 @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);
}
我的问题是我忘了用@Bean 注释 Docket api() 方法。