如何使用RestTemplate通过请求正文进行POST调用

时间:2019-05-05 16:59:12

标签: java httprequest httpresponse resttemplate httpentity

我正在尝试使用RestTemplate发出POST请求,以发送请求正文和标头。

为此,我看到许多人都在使用HTTPEntity类。但是此类需要传递一个通用类型。内容类型为application / json。

在大多数情况下,我看到HttpEntity是使用String泛型类型创建的。像这样:

HttpEntity<String> requestEntity = new HttpEntity<String>(body, headers);
responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);

我没有得到什么,如何知道在创建HttpEntity对象时使用哪种数据类型? 我了解我们确实 ResponseEntity 将http调用的响应解析为字符串。但是我对http实体却不了解。

我试图使用Google的JsonObject在http实体对象中创建主体,如下所示:

JsonObject body = new JsonObject();
body.addProperty("key", "value");
.....

在邮递员中尝试时,该请求有效,但是当我使用String http实体时,在使用RestTemplate的代码中无效。

使用JsonObject类型时,出现此错误:

  

org.springframework.http.converter.HttpMessageNotWritableException:无法编写JSON:不是JSON基本

在使用String类型的http实体时,我收到一些通用错误消息,说明请求无效。

添加完整的请求正文:

JsonObject body = new JsonObject();
body.addProperty("transaction_id", transaction_id);
body.addProperty("timestamp", timestamp);
body.addProperty("device_token", deviceToken);
if (forUpdate)
    body.addProperty("bit0", true);

邮递员的工作卷发:

  

卷曲-X POST \     https://api.devicecheck.apple.com/v1/query_two_bits \     -H'内容类型:application / json'\     -H'授权:承载SOME_BEARER_TOKEN_STRING'\     -H'cache-control:no-cache'\     -d'{       “ device_token”:“ SOME_DEVICE_TOKEN”,       “ transaction_id”:“ f0bc2e5d-5bd9-4437-a455-fd1e210a6268”,       “时间戳记”:1557073737608   }'

那么有人可以帮助我理解如何发送此请求吗?

0 个答案:

没有答案