如何在Spring中使用restTemplate使用请求主体发出GET请求

时间:2019-09-27 17:52:00

标签: java spring rest http

我正在尝试通过请求正文向URL发出GET请求。在网上搜索之后,我发现在请求正文中包含GET请求是违反惯例的。但是我仍然想知道自Postman允许功能以来是否有办法。我正在尝试通常使用其RestTemplate类在Spring中实现此功能。我有以下内容:

   public List<CustomObj> findLeads(List<String> usernames)
   {
      log.info("getLeads:+ usernames={}", usernames);
      final HttpEntity<List<String>> httpEntityWithHeaders = createHttpEntityWithHeaders(usernames);
      final String uri = serviceHost + RESTFulURIConstants.LEADS_PATH_VIA_USERNAME;

  log.info("Calling uri from getLeads method, uri={}", uri);

  final ResponseEntity<List<CustomObj>> responseEntity = restTemplate.exchange(uri,
                                                                                  HttpMethod.GET,
                                                                                  httpEntityWithHeaders,
                                                                                  TYPE_REFERENCE_LEAD_RESPONSE);

  log.info("getLeads:-");

  return responseEntity.getBody();
}

   private HttpEntity<List<String>> createHttpEntityWithHeaders(final List<String> usernames)
   {
      final HttpHeaders headers = new HttpHeaders();
      headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
      headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
      return new HttpEntity<>(usernames, headers);
   }
   private static final ParameterizedTypeReference<List<CustomObj>>
  TYPE_REFERENCE_LEAD_RESPONSE = new ParameterizedTypeReference<List<CustomObj>>()
{
};

但是我继续遇到错误:"Required request body is missing: public java.util.List<CustomObj>。我可以使用Postman成功地调用它,并且Postman甚至具有此功能,它可以生成所需语言的代码(article)我尝试了该方法,Unirest和OKHttp不允许我将请求正文作为请求的一部分

有什么建议吗?

此外,将GET用于通常不在查询参数中的大型查询的行业标准是什么?

1 个答案:

答案 0 :(得分:0)

如果这是常规的获取请求,请在URL中发送参数。

如果需要您的请求正文中的数据,我建议您将此请求作为PATCH请求。如果数据对请求不是很重要,但是您希望允许客户端发送一些数据,那么这样做就没有问题。