Удалить базовый контроллер ошибок в SpringFox SwaggerUI

Есть ли способ удалить «базовый контроллер ошибок» из springfox swagger-ui?

Рисунок:

введите описание изображения здесь


person Rajkishan Swami    schedule 05.10.2015    source источник


Ответы (8)


Вы можете ограничить селектор обработчика запросов сканированием только пакета вашего проекта:

    return new Docket( DocumentationType.SWAGGER_2)
        .select()
        .apis( RequestHandlerSelectors.basePackage( "your package" ) )
        ...
person Carsten Zeitz    schedule 15.11.2015
comment
для тех, кто не знаком с тем, что заполнять для вашего пакета, это имя папки прямо под java - person notacorn; 17.06.2020
comment
В этом не было необходимости. Иногда непонятно, что кто-то имеет в виду, когда есть просто текст, который не соответствует действительности. Кроме того, даже если они, вероятно, могли понять это, прочитав документацию или код, не все такие замечательные, как вы. - person Jeff Walker; 08.09.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.

person bladekp    schedule 07.01.2019

  • Это можно сделать с помощью 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();
     }
    
person pvrforpranavvr    schedule 05.03.2018

Например, если ваш родительский пакет - 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();
    }

введите описание изображения здесь

person Tapan Banker    schedule 17.02.2019

U также может использовать аннотации springfox-swagger2. springfox.documentation.annotations.ApiIgnore

@ApiIgnore
public class ErrorController {

Это исключит этот класс из документации.

person Antony Mithun    schedule 21.11.2016
comment
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);
}
person RamirezRodriguez    schedule 10.12.2019

Моя проблема заключалась в том, что я забыл аннотировать метод Docket api () с помощью @Bean.

person Vinicius Rodrigues    schedule 01.02.2020

Попробовав множество решений, у меня ничего не работает. Наконец, я узнал самую основную вещь, а именно: убедитесь, что файл, в котором вы определили свой файл конфигурации 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();
}

Пожалуйста, проверьте это изображение

person ASK    schedule 15.02.2019
comment
Он будет работать нормально, даже если они находятся в разных пакетах. Это не такое ограничение, как то, что вы разместили. - person Rajkishan Swami; 15.02.2019
comment
Если ваши файлы bean-компонентов конфигурации находятся в разных пакетах, вы должны использовать аннотацию @componentScan (base-package) в своем основном методе. - person ASK; 15.02.2019
comment
Мы также можем использовать аннотацию импорта, чтобы класс SwaggerConfig можно было импортировать в основной класс. - person ASK; 04.04.2019