HTTP 使用 RestTemplate 获取标头 [英] HTTP get with headers using RestTemplate

查看:38
本文介绍了HTTP 使用 RestTemplate 获取标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 Spring RestTemplate 发送 GET 请求?其他问题用过POST,但我需要用GET.当我运行这个程序时,程序继续工作,但似乎网络被阻塞了,因为它在一个 AsyncTask 中,当我点击这个按钮后尝试运行另一个异步任务时,它们将无法工作.

How can I send a GET request using the Spring RestTemplate? Other questions have used POST, but I need to use GET. When I run this, the program continues to work, but it seems that the network is clogged because this is in an AsyncTask, and when I try to run another asynctask after I click on the button for this one, they won't work.

我尝试过

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);

推荐答案

RestTemplate getForObject() 方法不支持设置标题.解决方案是使用 exchange() 方法.

The RestTemplate getForObject() method does not support setting headers. The solution is to use the exchange() method.

因此,不要使用 restTemplate.getForObject(url, String.class, param)(没有标题),而是使用

So instead of restTemplate.getForObject(url, String.class, param) (which has no headers), use

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

HttpEntity<Void> requestEntity = new HttpEntity<>(headers);

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

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

Finally, use response.getBody() to get your result.

这个问题类似于这个问题.

这篇关于HTTP 使用 RestTemplate 获取标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆