如何在 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()是什么意思?