问题说明
- Spring boot 版本:2.6.0
- Swagger版本:2.9.2
在整合的时候IDE生成的时候提示错误,错误信息如下:
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" because the return value of "springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.documentation.RequestHandler)" is null at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.13.jar:5.3.13] at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.13.jar:5.3.13] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.0.jar:2.6.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.0.jar:2.6.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.0.jar:2.6.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.0.jar:2.6.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.0.jar:2.6.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.0.jar:2.6.0] at com.ityouzi.test3.Test3Application.main(Test3Application.java:12) ~[classes/:na] Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" because the return value of "springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.documentation.RequestHandler)" is null at springfox.documentation.spi.service.contexts.Orderings$8.compare(Orderings.java:112) ~[springfox-spi-2.9.2.jar:null] at springfox.documentation.spi.service.contexts.Orderings$8.compare(Orderings.java:109) ~[springfox-spi-2.9.2.jar:null] at com.google.common.collect.ComparatorOrdering.compare(ComparatorOrdering.java:37) ~[guava-20.0.jar:na] at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na] at java.base/java.util.TimSort.sort(TimSort.java:220) ~[na:na] at java.base/java.util.Arrays.sort(Arrays.java:1232) ~[na:na] at com.google.common.collect.Ordering.sortedCopy(Ordering.java:855) ~[guava-20.0.jar:na] at springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider.requestHandlers(WebMvcRequestHandlerProvider.java:57) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper$2.apply(DocumentationPluginsBootstrapper.java:138) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper$2.apply(DocumentationPluginsBootstrapper.java:135) ~[springfox-spring-web-2.9.2.jar:null] at com.google.common.collect.Iterators$7.transform(Iterators.java:750) ~[guava-20.0.jar:na] at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47) ~[guava-20.0.jar:na] at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47) ~[guava-20.0.jar:na] at com.google.common.collect.MultitransformedIterator.hasNext(MultitransformedIterator.java:52) ~[guava-20.0.jar:na] at com.google.common.collect.MultitransformedIterator.hasNext(MultitransformedIterator.java:50) ~[guava-20.0.jar:na] at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:249) ~[guava-20.0.jar:na] at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:209) ~[guava-20.0.jar:na] at com.google.common.collect.FluentIterable.toList(FluentIterable.java:614) ~[guava-20.0.jar:na] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.defaultContextBuilder(DocumentationPluginsBootstrapper.java:111) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.buildContext(DocumentationPluginsBootstrapper.java:96) ~[springfox-spring-web-2.9.2.jar:null] at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:167) ~[springfox-spring-web-2.9.2.jar:null] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.13.jar:5.3.13] ... 14 common frames omitted
解决方案
在application文件中增加配置,配置内容如下:
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
我的配置文件格式是 yml
添加好配置以后,重新生成就没有错误了。
官方的解释说明:
如Spring Boot 2.6发行说明中所述,您可以通过在application.properties文件中将Spring.mvc.pathmatch.matching-strategy设置为ant path matcher来恢复Springfox假定将使用的配置。请注意,只有在不使用Spring Boot的执行器时,此功能才起作用。无论配置的匹配策略如何,执行器始终使用基于路径模式的解析。如果您想在Spring Boot 2.6及更高版本中将其与执行器一起使用,则需要对Springfox进行更改。
完整参考代码
下面我将整合的完整代码贴出来,方便大家参考,只是简单的示例,所以代码规范和完整性上有所欠缺,望见谅。
1、导入pom
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
swagger-bootstrap-ui:这个包是用来修改swagger默认的显示样式的,如果不想修改界面样式可不导入。
2、添加配置文件,将swagger的配置注入到容器中
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Swagger2的配置
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("用户模块") //模块名称
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.ityouzi.test3.controller")) //扫描的控制器路径
.paths(PathSelectors.any())
.build();
}
/**
* 获取接口文档的一些信息
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("xxx项目开发接口文档") //接口文档标题
.description("此文档仅供开发技术组领导、开发人员使用") //描述
.termsOfServiceUrl("http://www.baidu.com/") //相关的网址
.contact(new Contact("后端开发","http://www.xxx.com/","XXXXXX7805@qq.com")) //作者 邮箱等
.version("1.0") //版本号
.build();
}
}
里面的一些信息可根据自己的情况修改,比如作者、版本等等,详见中文的注释。
3、控制器上增加注解
import com.ityouzi.test3.entity.HelpCategory;
import com.ityouzi.test3.service.IHelpCategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@RestController
@RequestMapping("/help")
@Api(tags = "帮助信息管理")
public class HelpController {
@Autowired
private IHelpCategoryService helpCategoryService;
@GetMapping("/queryAll")
@ApiOperation(value = "查询所有的帮助分类")
public String queryAll()
{
List<HelpCategory> list = this.helpCategoryService.list();
return list.toString();
}
@GetMapping("/detail")
@ApiOperation(value = "根据Id查询详情信息")
@ApiImplicitParams({@ApiImplicitParam(name = "id",dataType = "long",value = "帮助信息Id",required = true)})
public String detail(Long id)
{
List<HelpCategory> list = this.helpCategoryService.list();
return list.toString();
}
}
上面只是一些简单的注解,更得多注解推荐观看视频:https://www.bilibili.com/video/BV12p4y187Dj?p=54
4、修改全局的配置文件,不修改会导致错误,就上面出现的问题
在application文件中增加配置,配置内容如下,我的配置文件格式是 yml:
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
5、开始执行
IDE上启动网站。
- 如果没有替换过Swagger的样式,则访问的域名是:http://localhost:8080/swagger-ui.html,前面的域名根据自己项目的配置来。
- 如果替换过默认的样式(swagger-bootstrap-ui),则访问的域名是:http://localhost:8080/dochtml,前面的域名根据自己项目的配置来。
效果图如下:

默认样式的效果

替换了默认样式的效果
以上内容是我在学习的时候一点总结,如有不正之处还请见谅。
发布者:IT柚子,转转请注明出处:https://ityouzi.com/archives/spring-boot-2-6-swagger2-documentationpluginsbootstrapper.html
微信扫一扫
支付宝扫一扫