Spring Boot集成Minio报错okhttp3.RequestBody.create方法不存在
问题根因
报错属于典型的依赖版本不兼容导致的NoSuchMethodError:
- Minio 8.3.9 内部依赖OkHttp 4.x系列,代码中调用的
okhttp3.RequestBody.create(byte[], MediaType)方法是OkHttp 4.x提供的重载方法。OkHttp 3.x全版本(包括你手动引入的3.14.4、Spring Boot 2.2.0默认管理的3.x版本)仅提供RequestBody.create(MediaType, byte[])签名的方法,参数顺序相反,不存在Minio调用的目标方法,因此触发报错。 - 你之前尝试的两种方案都停留在OkHttp 3.x版本范围内,无法解决兼容性问题。
解决方案
按以下步骤操作即可修复:
- 替换pom.xml中的okhttp依赖,使用兼容Java 8的OkHttp 4.x版本(注意OkHttp 4.10.0及以上版本要求Java 11运行环境,Java 8场景下最高可用版本为4.9.3),同时排除Minio及其他依赖传递引入的OkHttp版本,避免类冲突,配置参考如下:
<!-- Minio 依赖 --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.3.9</version> <exclusions> <!-- 排除Minio传递引入的okhttp,统一使用指定版本 --> <exclusion> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> </exclusion> </exclusions> </dependency> <!-- 兼容Java 8的OkHttp 4.x版本 --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.3</version> </dependency>
- 执行Maven命令排查全依赖树,确认没有其他依赖传递引入OkHttp 3.x版本:
mvn dependency:tree -Dincludes=com.squareup.okhttp3:okhttp
如果输出结果中存在3.x版本的okhttp,在对应引入该依赖的配置块中添加exclusion规则排除3.x版本即可。
- 如果你是打WAR包部署到外部Tomcat容器,需要检查Tomcat根目录下的lib文件夹,若存在OkHttp 3.x的jar包需要删除,避免Tomcat类加载器优先加载自身lib目录下的低版本包。
- 执行以下命令清理Maven缓存、重新拉取依赖并打包,避免旧版本依赖残留:
mvn clean install -U
验证方式
启动项目后可通过断点调试或执行类加载路径打印代码,确认运行时加载的OkHttp版本为4.9.3,再调用Minio相关接口即可正常运行。
内容的提问来源于stack exchange,提问作者user404
相关产品推荐
相关产品推荐

