Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
You might encounter the “Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
” error while upgrading Spring Boot and Swagger API Documentation from 2.5.0 to 2.6.X and 2.X to 3.X respectively.
This issue is caused by the new path pattern-based path matching strategy for Spring MVC which is now the new default from Spring Boot 2.6.0 and is not supported by Spring Fox 3.0.0.
You can resolve this error by the below workaround:
1. Set the below path matcher property in the application.properties
file.
spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
2. Add the following bean in the Spring Boot starter file.
@Bean
public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {
List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
allEndpoints.addAll(webEndpoints);
allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
String basePath = webEndpointProperties.getBasePath();
EndpointMapping endpointMapping = new EndpointMapping(basePath);
boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
}
private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
}
3. Restart the application.
References
- PathPattern Based Path Matching Strategy for Spring MVC
- Customizing Swagger 2 RESTful API Documentation
Similar Posts
- @ConfigurationProperties Annotation in Spring Boot
- Spring Boot RESTful API Documentation with Swagger 2
- JSP page/file is not rendering in Spring Boot application
- Difference Between @Component and @ComponentScan Annotations in Spring Boot
- Spring AOP + AspectJ @Pointcut Annotation Example
- Spring MVC @Controller, @RequestMapping, @RequestParam, and @PathVariable Annotation Example
- Types of Password Encoders in Spring Security
- Spring 5 MVC Hello World using XML configuration
- Spring Boot- The Tomcat connector configured to listen on port 8080 failed to start
- Securing Passwords with Spring Security Password Encoder