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 ...写的不对。