Избегайте базового-ошибка-контроллера по умолчанию от swagger api
Я использую swagger2 в моем проекте загрузки spring. Он работает хорошо, но мне нужно исключить basic-error-controller
из api. В настоящее время я использую следующий код с помощью regex. Он работает, но есть ли какой-либо идеальный способ сделать это.
КОД:
@Bean
public Docket demoApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex('(?!/error.*).*'))
.build()
}
Ответы
Ответ 1
После поиска в Google я получил решение по одной проблеме в GitHub, [вопрос] Как исключить основной-ошибочный контроллер из добавления в описание чванства? , Это можно сделать с помощью Predicates.not()
.
Код выглядит следующим образом после использования Predicates.not()
.
@Bean
public Docket demoApi() {
return new Docket(DocumentationType.SWAGGER_2)//<3>
.select()//<4>
.apis(RequestHandlerSelectors.any())//<5>
.paths(Predicates.not(PathSelectors.regex("/error.*")))//<6>, regex must be in double quotes.
.build()
}
Ответ 2
Много времени прошло, но если у кого-то есть такая же проблема, вы можете сделать это, предоставив селектор RestController:
new Docket(SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.any())
.build();
Помня о том, что ваши контроллеры аннотируются с помощью @RestController
Ответ 3
Лучший способ, который я нашел для ограничения конечных точек, отображаемых документацией swagger, заключается в следующем:
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(paths())
.build().apiInfo(metadata());
}
private Predicate<String> paths() {
return or(
regex("/firstContext.*"),
regex("/secondContext.*"));
}
private ApiInfo metadata() {
return new ApiInfoBuilder()
.title("SomeTitle")
.description("SomeDescription")
.build();
}
Таким образом, каждая конечная точка, которая не начинается с контекстов метода paths(), не будет отображаться с помощью swagger
Ответ 4
Я столкнулся с той же проблемой. Я сделал это.
java
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxx.xxx"))
.paths(PathSelectors.any())
.build();
}
Ответ 5
В моем случае, когда я создаю метод как @Bean, он не будет показывать basic-error-controller.
Если я удалю @Bean, в swagger-ui будет показан basic-error-controller.
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage(CONTROLLER_PATH))
.paths(regex("/.*")).build();}