Is there a way i can remove the "basic-error-controller" from springfox swagger-ui?
Picture:
You can restrict the request handler selector to scan only the package of your project:
return new Docket( DocumentationType.SWAGGER_2)
.select()
.apis( RequestHandlerSelectors.basePackage( "your package" ) )
...
I think, the most elegant solution is to include only @RestController
controllers into swagger, only thing to bear in mind, is to annotate all the REST controllers with that annotation:
new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.any())
.build();
As BasicErrorController
is annotated with @Controller
only, swagger would avoid BasicErrorController
in definition file. Of course you can use your custom annotation instead of @RestController
to mark your REST controllers as controllers eligible by swagger.
It can be done using 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();
}
For example if your parent Package is com.app.microservice
package com.app.microservice;
Then use the following code it will only display the Controllers within the Package and disable/exclude others
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.app.microservice"))
.build();
}
U can also use springfox-swagger2 annotations. springfox.documentation.annotations.ApiIgnore
@ApiIgnore
public class ErrorController {
This would exclude that class from documentation.
BasicErrorController
is library functions, so cannot be easily annotated with @ApiIgnore
–
Laure My problem was just that I forgot to annotate Docket api() method with @Bean.
This can be done by moving @Bean
definition to main class (the one with @SpringBootApplication
) and use its this.getClass().getPackageName()
in basePackage()
:
@Bean
public Docket swagger() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage(this.getClass().getPackageName()))
.paths(PathSelectors.any())
.build()
.useDefaultResponseMessages(false);
}
With Swagger.v3, we can use @Hidden
. So:
import io.swagger.v3.oas.annotations.Hidden;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyErrorController implements ErrorController {
@RequestMapping("/error")
@Hidden // Don't show in the Swagger doco
@ResponseBody
public void handleError(HttpServletRequest request, HttpServletResponse response) throws IOException {
// My handler code
}
}
After trying a lot of solutions, nothing works for me. Finally I got to know the very basic thing i.e. make sure that the file in which you have defined your swagger configuration file and your main method file should be in the same package .
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.paths(Predicates.not(PathSelectors.regex("/error.*")))
.build();
}
© 2022 - 2024 — McMap. All rights reserved.
java
– Unthinkable