NoSuchMethodError:okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl在使用改型2时
我使用改装2发送http请求,代码如下:NoSuchMethodError:okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl在使用改型2时,java,Java,我使用改装2发送http请求,代码如下: ReconcileService service = RetrofitUtil.InitRetrofitOkhttp().create(ReconcileService.class); Call<ResponseBody> call = service.page(request); ResponseBody body = call.execute().body();
ReconcileService service = RetrofitUtil.InitRetrofitOkhttp().create(ReconcileService.class);
Call<ResponseBody> call = service.page(request);
ResponseBody body = call.execute().body();
String str = new String(body.bytes(), "UTF-8");
ObjectMapper mapper = new ObjectMapper();
Response response = mapper.readValue(str, Response.class);
gradle :soa-illidan:soa-illidan-service:dependencies --configuration runtimeClasspath|grep -v "(*)"|grep -C 10 "okhttp"
但运行此代码时,它会给我提示:
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]
Caused by: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl;
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) [spring-webmvc-5.1.13.RELEASE.jar!/:5.1.13.RELEASE]
... 55 common frames omitted
Caused by: java.lang.NoSuchMethodError: okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl;
at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:492) ~[retrofit-2.8.1.jar!/:na]
at com.sportswin.soa.misc.biz.common.RetrofitUtil.InitRetrofitOkhttp(RetrofitUtil.java:42) ~[soa-misc-biz-1.0.0-SNAPSHOT.jar!/:na]
at com.sportswin.soa.illidan.controller.impl.tenant.ReconcilationController.getRes(ReconcilationController.java:38) ~[classes!/:na]
at com.sportswin.soa.illidan.controller.impl.tenant.ReconcilationController.tenantPage(ReconcilationController.java:31) ~[classes!/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_212]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_212]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_212]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_212]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) [spring-web-5.1.13.RELEASE.jar!/:5.1.13.RELEASE]
我试图从互联网上找到答案,但所有人都要求升级okhttp版本。但现在我的okhttp版本已经是4.0了,这是我的gradle配置:
api("com.squareup.okhttp3:okhttp:4.0.0")
api "com.squareup.retrofit2:converter-gson:2.8.1"
那么问题出在哪里?我应该如何解决它呢?我使用gradle命令检查引用,如下所示:
ReconcileService service = RetrofitUtil.InitRetrofitOkhttp().create(ReconcileService.class);
Call<ResponseBody> call = service.page(request);
ResponseBody body = call.execute().body();
String str = new String(body.bytes(), "UTF-8");
ObjectMapper mapper = new ObjectMapper();
Response response = mapper.readValue(str, Response.class);
gradle :soa-illidan:soa-illidan-service:dependencies --configuration runtimeClasspath|grep -v "(*)"|grep -C 10 "okhttp"
并找到okhttp jar的实际版本是3.8.1:
$ gradle :soa-illidan:soa-illidan-service:dependencies --configuration runtimeClasspath|grep -v "(*)"|grep -C 10 "okhttp"
\--- project :soa-illidan:soa-illidan-api
+--- log4j:log4j:1.2.17
+--- org.apache.commons:commons-collections4:4.4
+--- org.apache.commons:commons-lang3:3.9
+--- project :soa-misc-biz
| +--- log4j:log4j:1.2.17
| +--- org.apache.commons:commons-collections4:4.4
| +--- org.apache.commons:commons-lang3:3.9
| +--- com.github.pagehelper:pagehelper:5.1.11
| | \--- com.github.jsqlparser:jsqlparser:2.0 -> 2.1
| +--- com.squareup.okhttp3:okhttp:4.0.0 -> 3.8.1
| | +--- com.squareup.okio:okio:2.2.2
| | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.2.60 -> 1.2.71
| | | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.71
| | | \--- org.jetbrains:annotations:13.0
| +--- com.squareup.retrofit2:converter-gson:2.8.1
| | +--- com.squareup.retrofit2:retrofit:2.8.1
| | \--- com.google.code.gson:gson:2.8.5 -> 2.8.6
| +--- project :soa-misc
| | +--- log4j:log4j:1.2.17
| | +--- org.apache.commons:commons-collections4:4.4
Errors occurred while build effective model from /Users/dolphin/.gradle/caches/modules-2/files-2.1/com.alibaba/druid/1.1.9/e6a9ff9e84dd1c498d9e12373331fbacd92d330a/druid-1.1.9.pom:
'dependencies.dependency.systemPath' for com.alibaba:jconsole:jar must specify an absolute path but is ${env.JAVA_HOME}/lib/jconsole.jar in com.alibaba:druid:1.1.9
'dependencies.dependency.systemPath' for com.alibaba:tools:jar must specify an absolute path but is ${env.JAVA_HOME}/lib/tools.jar in com.alibaba:druid:1.1.9
因此,我在buil.gradle
中添加了这一点,以强制使用okhttp的4.0.0版本:
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'com.squareup.okhttp3') {
details.useVersion "4.0.0"
}
}
}
问题解决了。希望对你有帮助