有没有办法可以从 springfox swagger-ui 中删除“基本错误控制器”?
图片:
您可以限制请求处理程序选择器仅扫描项目的包:
return new Docket( DocumentationType.SWAGGER_2)
.select()
.apis( RequestHandlerSelectors.basePackage( "your package" ) )
...
我认为,最优雅的解决方案是仅将@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 条件的控制器。
可以使用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();
}
例如,如果您的父包是 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();
}
U也可以使用springfox-swagger2注解。springfox.documentation.annotations.ApiIgnore
@ApiIgnore
public class ErrorController {
这将从文档中排除该类。
我的问题只是我忘了用@Bean 注释 Docket api() 方法。
这可以通过将@Bean
定义移动到主类(带有 的那个@SpringBootApplication
)并使用它this.getClass().getPackageName()
来完成basePackage()
:
@Bean
public Docket swagger() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage(this.getClass().getPackageName()))
.paths(PathSelectors.any())
.build()
.useDefaultResponseMessages(false);
}
在尝试了很多解决方案之后,对我来说没有任何效果。最后我知道了最基本的事情,即确保你定义了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();
}