Kei*_*son 2 android patch httpurlconnection retrofit
所以我想使用 Retrofit 发出 PATCH 请求,但目前我无法将 okhttp 添加到我的类路径中。当我尝试发出 PATCH 请求时,我得到下面的堆栈跟踪。有没有其他方法可以在不使用 okhttp 的情况下使用 Patch?
\n\n java.net.ProtocolException\n at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:644)\n at retrofit.client.UrlConnectionClient.prepareRequest(UrlConnectionClient.java:50)\n at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:37)\n at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:358)\n at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)\n at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)\n at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)\n at retrofit.Platform$Android$2$1.run(Platform.java:142)\n at java.lang.Thread.run(Thread.java:1019)\n06-09 10:53:09.349 1809-1897/**.****.****** D/Retrofit\xef\xb9\x95 ---- END ERROR\nRun Code Online (Sandbox Code Playgroud)\n
这是 的限制HttpUrlConnection。您可以使用 Apache 或 OkHttp,它们都支持PATCH作为替代客户端。这可以在构建器中明确完成:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(..)
.setClient(new OkClient())
.build()
Run Code Online (Sandbox Code Playgroud)
此外,某些服务器允许指定X-HTTP-Method-Override用于更改方法的标头。这样您就可以发送一个POST但包含PATCH在内的标头值。同样,这需要服务器支持。
最后,另一种选择是子类化 RetrofitUrlConnectionClient并使用反射来更改保存 HTTP 方法的字段。这是非常脆弱的,将来很容易破损,在我看来是最糟糕的选择。
| 归档时间: |
|
| 查看次数: |
2607 次 |
| 最近记录: |