【问题标题】:Patch Request Android Volley补丁请求 Android Volley
【发布时间】:2013-11-16 20:23:22
【问题描述】:

我目前正在一个项目中使用 Android 的 Volley 网络库。我已经从https://android.googlesource.com/platform/frameworks/volley/拉下了volley的master分支,所以我的库项目应该是最新的,但只支持以下请求方式:

/**
 * Supported request methods.
 */
public interface Method {
    int DEPRECATED_GET_OR_POST = -1;
    int GET = 0;
    int POST = 1;
    int PUT = 2;
    int DELETE = 3;
}

扩展库以支持补丁请求可能不会太麻烦,所以我的问题是为什么基础库不支持补丁请求?另外,任何人都可以建议任何已经添加此支持的好的 git 分支吗?

【问题讨论】:

  • 你找到答案了吗?

标签: android android-networking android-volley


【解决方案1】:

我终于找到了这个问题的答案。这是非常愚蠢的。问题不在于 Volley 框架。 Java 的 HTTPUrlConnection 不支持 PATCH。互联网上有使用 Java Reflection 将方法对象设置为 PATCH 的方法,但它们带来了额外的问题。

我终于使用X-HTTP-Method-Override 标头解决了这个问题。我什至用 body 发出了一个普通的 POST 请求,并添加了这个标题,如下所示。

X-HTTP-Method-Override: PATCH

它奏效了。您的 Web 服务器端应该支持方法覆盖。

【讨论】:

  • 最新 volley(自 2013 年 11 月 13 日起)现在原生支持 PATCH 方法,只需为您的请求指定 Method.PATCH。
  • 如果您将 HTTPUrlConnection 与 Volley 一起使用,它将无法正常工作。如果你使用 Apache 库,它可以正常工作,但如果你使用 HTTPUrlConnection,它会引发异常。
  • 那么我们如何解决问题@tasomaniac?找到解决方案了吗?如果是这样,请您在这里分享,因为我面临同样的问题。
  • 有人对 Volley 和 PATCH 的这个问题有答案吗?我觉得必须有一个更好、更简单的解决方案来解决这个问题,但我在任何地方都找不到。有什么想法吗?
  • 您可以使用 Square 的 Retrofit 库。如果您必须使用Volley,我们有两种选择。要么在 Volley 中使用 Apache 的 HTTPClient,要么使用我在 PATCH 请求中包含这个 HTTP 标头的方法。服务器必须支持X-HTTP-Method-Override。大多数服务器都支持它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2021-05-10
相关资源
最近更新 更多