如何在 Jersey Invocation Builder 中使用 PATCH 方法?
how to use PATCH method with Jersey Invocation Builder?
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 - 它不见了。
关于如何打补丁有什么建议吗?
====更新====
google了一下,好像jersey客户端不支持补丁。由于我们所有的应用程序 API 调用都是使用 jersey 客户端进行的,所以这有点问题。我假设我需要找到一个替代库、方法和代码来调用补丁,但它也需要支持 OATH 2.0。如果存在这样的库,并且理想情况下有一些示例,您有什么想法吗?
仅供参考,使用 Java 1.8.0_131-b11
感谢@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)));
我发现@Paul Samsotha、@John Little Accepted Answer 是正确的。
如果您没有发现 javax.ws.rs.client.Client
可以直接注入,类似于此的 Bean 方法(如果您有一个 extends extends Consumer<ClientBuilder>
的 Bean)可能会进一步帮助访问它:
import java.util.function.Consumer;
import javax.ws.rs.client.ClientBuilder;
@Bean
public Consumer<ClientBuilder> patchOverrideEnhancer() {
return (client) -> {
client.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
};
}
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 - 它不见了。
关于如何打补丁有什么建议吗?
====更新====
google了一下,好像jersey客户端不支持补丁。由于我们所有的应用程序 API 调用都是使用 jersey 客户端进行的,所以这有点问题。我假设我需要找到一个替代库、方法和代码来调用补丁,但它也需要支持 OATH 2.0。如果存在这样的库,并且理想情况下有一些示例,您有什么想法吗?
仅供参考,使用 Java 1.8.0_131-b11
感谢@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)));
我发现@Paul Samsotha、@John Little Accepted Answer 是正确的。
如果您没有发现 javax.ws.rs.client.Client
可以直接注入,类似于此的 Bean 方法(如果您有一个 extends extends Consumer<ClientBuilder>
的 Bean)可能会进一步帮助访问它:
import java.util.function.Consumer;
import javax.ws.rs.client.ClientBuilder;
@Bean
public Consumer<ClientBuilder> patchOverrideEnhancer() {
return (client) -> {
client.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
};
}