Spring Boot集成Swagger时出现StringUtils.containsAny()方法缺失错误
问题描述
在Spring Boot(Gradle)项目集成Swagger时出现以下错误:
2024-06-03T16:01:55.361+05:30 INFO 38783 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2024-06-03T16:01:55.361+05:30 INFO 38783 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2024-06-03T16:01:55.362+05:30 INFO 38783 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2024-06-03T16:01:55.764+05:30 ERROR 38783 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.NoSuchMethodError: 'boolean org.apache.commons.lang3.StringUtils.containsAny(java.lang.CharSequence, java.lang.CharSequence[])'] with root cause java.lang.NoSuchMethodError: 'boolean org.apache.commons.lang3.StringUtils.containsAny(java.lang.CharSequence, java.lang.CharSequence[])' at org.springdoc.api.AbstractOpenApiResource.buildPathItem(AbstractOpenApiResource.java:1102) ~[springdoc-openapi-starter-common-2.1.0.jar:2.1.0]
使用的依赖:
implementation 'org.apache.commons:commons-lang3:3.12.0' implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.1.0'
相同依赖在其他项目正常运行,但新建项目出现该问题。
原因分析
这个错误是类路径中存在低版本的commons-lang3,与你声明的3.12.0版本冲突导致的。StringUtils.containsAny(CharSequence, CharSequence[])这个方法重载是在commons-lang3 3.8及以上版本才新增的,低版本没有该方法。新建项目可能通过其他依赖间接引入了更低版本的commons-lang3,比如Spring Boot部分starter默认依赖的版本低于3.12.0,导致运行时实际加载了低版本的类文件。
解决方案
- 强制指定commons-lang3版本:在Gradle配置中添加强制依赖规则,确保所有模块统一使用3.12.0版本:
configurations.all { resolutionStrategy.force 'org.apache.commons:commons-lang3:3.12.0' } - 排查并排除低版本依赖:执行
./gradlew dependencies命令查看依赖树,定位引入低版本commons-lang3的依赖,然后排除其传递依赖。例如:implementation('org.springframework.boot:spring-boot-starter-web') { exclude group: 'org.apache.commons', module: 'commons-lang3' } - 清理Gradle缓存:缓存中可能残留旧版本jar,执行以下命令清理缓存并重新构建:
./gradlew clean build --refresh-dependencies
内容的提问来源于stack exchange,提问作者Ùtkårsh Thãkûr
相关产品推荐
相关产品推荐

