Избегая умолчанию-ошибка-контроллер от чванства API-интерфейс

Я использую swagger2 в моем проекте spring boot. Он работает хорошо, но мне нужно исключить basic-error-controller из api. В настоящее время я использую следующий код, используя regex. Это работает, но есть отличный способ сделать это.

код :

@Bean
public Docket demoApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.regex('(?!/error.*).*'))
            .build()
}

4 ответов


после поиска в google я получил решение от одной проблемы в GitHub,[вопрос] Как исключить основной контроллер ошибок из добавления в описание swagger?. Это можно сделать с помощью 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()
}

прошло много времени, но если у кого-то есть такая же проблема, вы можете сделать это, предоставив селектор для RestController:

new Docket(SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .paths(PathSelectors.any())
                .build();

имея в виду, что ваши контроллеры аннотируются @RestController


лучший способ ограничить конечные точки, отображаемые документацией 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


я столкнулся с той же проблемой. Я сделал это.

java
@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.xxx.xxx"))
            .paths(PathSelectors.any())
            .build();
}