答案 0 :(得分:23)
您可以将请求处理程序选择器限制为仅扫描项目的包:
return new Docket( DocumentationType.SWAGGER_2)
.select()
.apis( RequestHandlerSelectors.basePackage( "your package" ) )
...
答案 1 :(得分:6)
可以使用 Predicates.not()来完成。
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.paths(Predicates.not(PathSelectors.regex("/error.*")))
.build();
}
答案 2 :(得分:4)
我认为,最优雅的解决方案是仅将@RestController
控制器包括在内,唯一需要牢记的是,用该注释对所有REST控制器进行注释:
new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.any())
.build();
由于BasicErrorController
仅用@Controller
注释,因此摇摇晃晃将避免在定义文件中使用BasicErrorController
。当然,您可以使用自定义注释而不是@RestController
来将REST控制器标记为可摇摇欲坠的控制器。
答案 3 :(得分:2)
例如,如果您的父软件包是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();
}
答案 4 :(得分:1)
尝试了很多解决方案后,对我没有任何帮助。最后,我了解了最基本的内容,即确保已在其中定义了 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();
}
答案 5 :(得分:1)
这可以通过将@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);
}
答案 6 :(得分:1)
我的问题只是我忘了用@Bean注释Docket api()方法。
答案 7 :(得分:0)
你也可以使用springfox-swagger2注释。 springfox.documentation.annotations.ApiIgnore
@ApiIgnore
public class ErrorController {
这会从文档中排除该类。