当前位置: 首页 > 知识库问答 >
问题:

使用RestTemplate使用Header的HTTP get

养枫涟
2023-03-14

如何使用Spring RestTemplate发送GET请求?其他问题都用了POST,但我需要用get。当我运行这个程序时,程序继续工作,但似乎网络堵塞了,因为它在一个AsyncTask中,当我单击这个按钮后试图运行另一个AsyncTask时,它们将无法工作。

我试着做

String url = "https://api.blah.com/2.0/search/cubes?w=jdfkl&whitespace=1";

MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("Bearer", accessToken);

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //copied this from somewhere else, not sure what its for

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);

HttpMessageConverter<String> stringConverter = new StringHttpMessageConverter();
FormHttpMessageConverter formConverter = new FormHttpMessageConverter();
List<HttpMessageConverter<?>> msgConverters = new ArrayList<HttpMessageConverter<?>>();


msgConverters.add(formConverter);
msgConverters.add(new MappingJacksonHttpMessageConverter());
msgConverters.add(stringConverter); 

template.setMessageConverters(msgConverters);
//SetSearchResponseData is my custom class to store the incoming JSON
ResponseEntity<SetSearchResponseData> result = template.exchange(url, HttpMethod.GET, request, SetSearchResponseData.class);
//If I was using post, i could have done SetSearchResponseDataresponse = restTemplate.postForObject(url, request, SetSearchResponseData.class);

共有1个答案

金英华
2023-03-14

RestTemplateGetForObject()方法不支持设置标头。解决方案是使用exchange()方法。

因此,不要使用resttemplate.getforobject(url,string.class,param)(它没有标头)

HttpHeaders headers = new HttpHeaders();
headers.set("Header", "value");
headers.set("Other-Header", "othervalue");
...

HttpEntity entity = new HttpEntity(headers);

ResponseEntity<String> response = restTemplate.exchange(
    url, HttpMethod.GET, entity, String.class, param);

最后,使用response.getbody()获取结果。

这个问题和这个问题相似。

 类似资料:
  • 我正在发送API和接收状态代码400与我需要解析的正文 在使用RestTemplate时,我无法解析响应: 在这种情况下,我怎么还能得到正文/标题?我必须使用RestTemplate的替代方案吗? 此外,当我在内遇到捕获异常时,如何返回到请求上下文:

  • 我试图使用来生成。出于某种原因,我无法重现我使用创建的,该代码可以毫无问题地运行。 下面是我的调用成功并返回200:

  • 我正在尝试为Vtiger REST API创建一个Java包装器。我想避免使用vtwsclib库,因为我找不到它的Maven工件。我想使用Spring。实际上,我不明白为什么我需要一些特殊的库来访问一个WebService的REST API。 {“success”:false,“error”:{“code”:“access_denied”,“message”:“ID执行操作的权限被拒绝”}} 最后

  • 我正在尝试使用这个api,这是链接 我已经在我的控制器中尝试过了 在我的日程安排程序中 而他们都没能拿到汇率。 为什么我不能使用rest模板获得汇率。

  • 问题内容: 我正在使用URL类从中读取InputStream。有什么我可以使用RestTemplate的方法吗? 我怎样才能 用,而不是使用? 问题答案: 您不应该直接获得。旨在封装处理响应(和请求)内容。它的优势在于处理所有IO,并为您提供现成的Java对象。 的一位原始作者Brian Clozel 表示: 并不意味着流响应主体;它的合同不允许这样做,而且已经存在了很长时间,以至于在不中断许多应

  • 这就是我如何尝试使用RestTemplate调用服务器, 这就是我如何使用它(用于测试) 我的登录响应类及其子类, null null null null 公共类BaseResponse{ 受保护字符串StatusCode; 我的问题是,1。为什么调用服务器时会出现此错误 信息:org.springframework.beans.factory.support.defaultListableBea