使用JSON字符串作为正文创建JAX-RS客户端发布请求

时间:2018-04-01 17:33:40

标签: json post jax-rs jsonp rest-client

我正在为其中一个供应商REST服务编写REST客户端。我使用的是jersey 2.x和JSON-P,下面是我添加的依赖项。

<dependencies>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-processing</artifactId>
    <version>2.26</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.26</version>
</dependency>
</dependencies>

我成功编写了GET请求代码并收到了JSON输出。我将它保存到一个文件中并使用JSON-P来解释并完成我自己的逻辑而没有任何问题。

但现在我需要写一个POST请求。当我使用如下的CURL时,我能够做到。并希望使用Jeresey 2.x和JSON-P实现相同的目标。

curl -v -H "Accept:application/json" -H "Content-Type:application/json" -u user:password -X POST --databinary @./InputParameters.json https://<IP>:<PORT>/Configuration/server

InputParameters.json contents
{
"ip": "10.197.70.16",
"partNumber": 202067,
"model": "IBM P7"
}

当我尝试以JSON格式({"ip": "10.197.70.16", "partNumber": 202067, "model": "IBM P7"})将字符串传递给String时,但是没有用。所以尝试如下的JsonObject仍然没有工作。

JsonObject jsonObj = Json.createObjectBuilder()
            .add("ip", "10.197.70.16")
            .add("partNumber", 202067)
            .add("model", "IBM P7")
            .build();

response = invocationBuilder.post(Entity.json(jsonObj));

我知道核心java,基于这种经验,我跳进编写这个程序并获得了GET但不是POST的成功。我怀疑我在做一些从根本上错误的POST。

1 个答案:

答案 0 :(得分:0)

在添加以下依赖项后解决问题。在这一点上,我不确定它做了什么。

感谢Swamy(TCS)的支持,以解决这个问题。

<dependency>
 <groupId>com.owlike</groupId>
 <artifactId>genson</artifactId>
 <version>1.4</version>
</dependency>