1. 起因
引入依赖okhttp4.10.0,本地调用
okhttp提供的Api
没问题,部署服务器上运行报错。错误信息:
java.lang.NoSuchMethodError: okhttp3.RequestBody.create(Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody;
<!--ok http client-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.10.0</version>
</dependency>
2. 经过
根据错误信息可知,找不到该方法,但是本地能正常运行,怀疑是打包时引入的版本并非是4.10.0版本,于是查看pom.xml文件是否有okhttp的其他版本。
查看后发现只有这一个4.10.0......,这就尴尬了,于是我将okhttp换成3.x版本
<!--ok http client-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
</dependency>
发现所有的okhttp 3.x
RequestBody.create()方法,MediaType是第一个
参数。
而okhttp
4.10.0 显示
RequestBody.create(okhttp3.MediaType, java.lang.String)
方法已过时,建议使用
MediaType在后面的方法,
不管了还能用就先试试。
3. 结果
4. 总结
最后解决办法就是使用了okhttp 4.10.0版本的过时方法:
RequestBody.create(okhttp3.MediaType, java.lang.String),我怀疑是:
原因1:打包时将3.x打进来了,但是查不到。
原因2:pom.xml <build></build>写的不对。