如何将 PATCH 方法与泽西岛调用生成器一起使用


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 - 它丢失了。

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

==== 更新 ====

经过一番谷歌搜索,似乎球衣客户端不支持补丁。由于我们所有的应用程序 API 调用都是使用泽西客户端进行的,因此这有点问题。 我假设 Ill 需要找到一个替代库、方法和代码来调用补丁,但它也需要支持 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(HttpMethod.PATCH, Entity.json(objectMapper.writeValueAsString(payload)));

我发现@Paul Samsotha,@John很少接受的答案是正确的。

如果您没有发现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);
    };
}

最新更新