Есть ли способ удалить «базовый контроллер ошибок» из springfox swagger-ui?
Рисунок:
Вы можете ограничить селектор обработчика запросов сканированием только пакета вашего проекта:
return new Docket( DocumentationType.SWAGGER_2)
.select()
.apis( RequestHandlerSelectors.basePackage( "your package" ) )
...
java
- person notacorn; 17.06.2020
Я думаю, что наиболее элегантным решением является включение в swagger только @RestController
контроллеров, единственное, что нужно иметь в виду, - это аннотировать все контроллеры REST с помощью этой аннотации:
new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.any())
.build();
Поскольку BasicErrorController
аннотируется только @Controller
, чванство позволит избежать 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 {
Это исключит этот класс из документации.
BasicErrorController
- это библиотечные функции, поэтому аннотировать @ApiIgnore
не так просто.
- person bladekp; 09.01.2019
Это можно сделать, переместив определение @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);
}
Моя проблема заключалась в том, что я забыл аннотировать метод Docket api () с помощью @Bean.
Попробовав множество решений, у меня ничего не работает. Наконец, я узнал самую основную вещь, а именно: убедитесь, что файл, в котором вы определили свой файл конфигурации 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();
}
Пожалуйста, проверьте это изображение