现象
首先,介绍下我所用的 swagger 和 springboot 的版本,如下:
- springfox-boot-starter(swagger) 3.0.0
- spring-boot-starter-parent 2.1.3.RELEASE
此时启动 springboot,会出现如下错误信息:
Caused by: java.lang.NoSuchMethodError: org.springframework.plugin.core.PluginRegistry.getPluginFor(Ljava/lang/Object;)Ljava/util/Optional;
at springfox.documentation.schema.plugins.SchemaPluginsManager.viewProvider(SchemaPluginsManager.java:95)
at springfox.documentation.spring.web.readers.operation.OperationModelsProvider.viewForReturn(OperationModelsProvider.java:116)
解析
上边错误信息的意思是,swagger 要依赖于 spring-plugin-core 中的 getPluginFor 方法,但是该方法在当前 springboot 项目的所依赖的 spring-plugin-core 中不存在。swagger 3.0.0 ,也就是 springfox-boot-starter 3.0.0 需要依赖不低于 2.0.0.RELEASE 版本的 spring-plugin-core,如下图:
当前 springboot 项目引入的 spring-boot-starter-parent 的版本是 2.1.3.RELEASE,这里边的 spring-plugin-core 对应的是哪个版本呢?如下图:
通过上图我们可以看到,当前 springboot 项目实际依赖的是 spring-plugin-core 1.2.0.RELEASE 版本,由于该版本低于 2.0.0.RELEASE,自然也就报错了。让我们通过父 pom 中的定义看得再清楚些:
解决
通过上文的解析,显然是因为 “springboot 项目引入的 spring-plugin-core 版本低于 2.0.0.RELEASE” 而导致的。所以,我们可以通过强制将 spring-plugin-core 版本指定为 2.0.0.RELEASE 版本来解决这个问题了,如下图: