【问题标题】:Retrofit & HTTP Patch改造和 HTTP 补丁
【发布时间】:2014-07-29 21:55:46
【问题描述】:

所以我想使用 Retrofit 发出 PATCH 请求,但目前我无法将 okhttp 添加到我的类路径中。当我尝试发出 PATCH 请求时,我得到下面的堆栈跟踪。有没有其他方法可以在不使用 okhttp 的情况下使用 Patch?

    java.net.ProtocolException
        at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:644)
        at retrofit.client.UrlConnectionClient.prepareRequest(UrlConnectionClient.java:50)
        at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:37)
        at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:358)
        at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)
        at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)
        at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
        at retrofit.Platform$Android$2$1.run(Platform.java:142)
        at java.lang.Thread.run(Thread.java:1019)
06-09 10:53:09.349    1809-1897/**.****.****** D/Retrofit﹕ ---- END ERROR

【问题讨论】:

    标签: android httpurlconnection patch retrofit


    【解决方案1】:

    这是HttpUrlConnection 的限制。您可以使用都支持 PATCH 的 Apache 或 OkHttp 作为替代客户端。这可以在构建器中显式完成:

    RestAdapter restAdapter = new RestAdapter.Builder()
        .setEndpoint(..)
        .setClient(new OkClient())
        .build()
    

    此外,一些服务器允许指定 X-HTTP-Method-Override 标头来更改方法。有了这个,您将发送一个POST,但包含PATCH 作为此标头值。同样,这需要服务器支持。

    最后,另一种选择是继承 Retrofit 的 UrlConnectionClient 并使用反射来更改包含 HTTP 方法的字段。这是非常脆弱的,以后容易损坏,在我看来是最糟糕的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多