如何在 Jersey Invocation Builder 中使用 PATCH 方法?

Posted

技术标签:

【中文标题】如何在 Jersey Invocation Builder 中使用 PATCH 方法?【英文标题】:how to use PATCH method with Jersey Invocation Builder? 【发布时间】:2019-09-10 16:29:07 【问题描述】:
WebTarget webTarget = httpClient.target(url);
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON)
                .header(HttpUtils.AUTHORISATION_HEADER_NAME, "Bearer " + theAccessToken);
response = invocationBuilder.put(Entity.json(objectMapper.writeValueAsString(payload)));

httpClient 的类型为 javax.ws.rs.client.Client 并被注入。

invocatioBuilder 实现了javax.ws.rs.client.Invocation.Builder,但定义在包org.glassfish.jersey.client

invocationBuilder.put、invocationBuilder.post、invocationBuilder.get 都存在并且可以工作,但这里没有 invocationBuilder.patch - 它丢失了。

关于如何修补的任何建议?

==== 更新 ====

经过一番谷歌搜索,jersey 客户端似乎不支持补丁。由于我们所有的应用程序 API 调用都是使用 jersey 客户端进行的,所以这有点问题。我假设我需要找到一个替代库、方法和代码来调用补丁,但它也需要支持 OATH 2.0。如果存在这样的库,有什么想法吗?最好有一些例子?

仅供参考,使用 Java 1.8.0_131-b11

【问题讨论】:

method("PATCH") 嗨,在我的 IDE 中,我只有 post、get 和 put,没有补丁。 method()。 ***.com/a/26341128/2587435 很好,我不知道 method() 是 put()、post() 等的直接替代品。我试过了,现在得到“javax.ws.rs.ProcessingException: java.net. ProtocolException: Invalid HTTP method: PATCH" on line with "response = invocationBuilder.method("PATCH", Entity.json(...)". 谷歌搜索这个错误,有人建议 "Client jerseyClient = ClientBuilder.newClient() .property (HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true)" 但我没有 Client 对象,只有 WebTarget 和 Invocation.Builder 对象。 【参考方案1】:

感谢@Paul Samsotha,工作解决方案如下:

WebTarget webTarget = httpClient.target(url);
webTarget.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);

Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON)
                .header(HttpUtils.AUTHORISATION_HEADER_NAME, "Bearer " + theAccessToken);
response = invocationBuilder.method("PATCH", Entity.json(objectMapper.writeValueAsString(payload)));

【讨论】:

你使用的是什么版本的 jersey-client ?

以上是关于如何在 Jersey Invocation Builder 中使用 PATCH 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring代理中实现自我调用(self-invocation)

如何在spring代理中实现自我调用(self-invocation)

拦截器(Interceptor)中的invocation.invoke()是什么意思?

Android JNI 学习:Invocation Api

如何在 tomcat 7 中的 Jersey 2 中使用异步回调

在 Jersey 生命周期中如何拦截请求?