如何使用null实体通过Jersy REST客户端调用PUT

Atu*_*mar 7 rest jersey-client jersey-2.0

我想通过Jersy客户端调用一些"升级"REST API,它被声明为PUT并且不需要任何正文内容.

但是,当我请求此API时,如下所示:

webTarget.request().put(Entity.json(null));
Run Code Online (Sandbox Code Playgroud)

它给出了如下错误:

Entity must not be null for http method PUT.
Run Code Online (Sandbox Code Playgroud)

所以需要知道,在jersy客户端中是否有任何方法可以使用null Entity调用PUT方法.

Pau*_*tha 12

您可以配置客户端属性

SUPPRESS_HTTP_COMPLIANCE_VALIDATION

默认情况下,Jersey客户端运行时执行某些HTTP合规性检查(例如哪些HTTP方法可以促进非空请求实体等),以便在用户尝试建立不符合HTTP规范的通信时快速失败.需要覆盖这些合规性检查并避免Jersey客户端运行时出于某种原因抛出异常的用户可以将此属性设置为true.因此,合规性问题将仅在日志中报告,并且不会抛出异常.

[...]

Client client = ClientBuilder.newClient();
client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
WebTarget target = client.target("...");
Response response = target.request().put(Entity.json(null));
Run Code Online (Sandbox Code Playgroud)


Pet*_*ser 6

我遇到了同样的错误,并使用一个空文本实体解决了它:

Entity<?> empty = Entity.text("");
webTarget.request().put(empty);
Run Code Online (Sandbox Code Playgroud)