Избегайте базового-ошибка-контроллера по умолчанию от 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();}