【问题标题】:How can i make MERGE call in java using HttpURLConnection or HttpClient library?如何使用 HttpURLConnection 或 HttpClient 库在 java 中进行 MERGE 调用?
【发布时间】:2013-01-17 05:58:52
【问题描述】:
我正在为我的 Web 应用程序使用第三方的 Web 服务。
为了更新他们提供 MERGE 方法的实体(他们用于新实体的 POST 方法(它需要所有字段))所以我搜索了这个方法是否有任何示例提供但没有成功。
有人可以告诉我如何实现这一目标。
有人也可以告诉我如何使用 PATCH 方法吗??
提前致谢。
【问题讨论】:
标签:
java
jakarta-ee
httpurlconnection
apache-httpclient-4.x
【解决方案1】:
HttpURLConnection.setRequestMethod 不支持 MERGE 和 PATCH 方法。
这是documentation 的HttpURLConnection.setRequestMethod:
设置 URL 请求的方法,其中之一:GET POST HEAD OPTIONS PUT DELETE TRACE 是合法的,受协议限制。默认方法是 GET。
您的第三方 Web 服务是 OData 服务吗? MERGE 方法是为 OData 发明的,在官方 HTTP 协议中不存在。这是来自微软(OData 的发明者)的relevant documentation:
本节的其余部分定义了在 OData 1.0 和 OData 2.0 协议中使用的自定义 HTTP MERGE 方法,以指定将通过使用合并语义来完成更新... MERGE 或 PATCH 和 PUT 是客户端意图...由于 MERGE 不是 HTTP 规范 [RFC2616] 中定义的动词之一,因此使用 MERGE 动词可能不会像 HTTP 中定义的方法那样无缝地流经网络中介规范...
作为一种解决方案,我建议将您的有效负载发送到OData batch request。这是一个特殊的 POST 请求,其有效负载可以包含多个 HTTP 请求。您可以在 batch 负载中指定您的 MERGE 和 PATCH 请求。