HTTP使用RestTemplate获取头文件

如何使用Spring RestTemplate发送GET请求? 其他问题已经使用POST,但我需要使用GET。 当我运行这个程序,程序继续工作,但似乎networking堵塞,因为这是在一个AsyncTask,当我尝试运行另一个asynctask后,我点击这个button,他们将无法正常工作。

我试过了

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

Solutions Collecting From Web of "HTTP使用RestTemplate获取头文件"

RestTemplate getForObject()方法不支持设置标题。 解决方法是使用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()来获得你的结果。

这个问题类似于这个问题 。

看看JavaDoc for RestTemplate 。

有相应的getForObject方法,它们是getForObject的HTTP GET等价物,但它们看起来不符合“GET with headers”的要求,因为没有办法在任何调用中指定标头。

看着JavaDoc,没有任何HTTP GET特定的方法允许你也提供标题信息。 还有其他select,其中一个已经find并正在使用。 exchange方法允许您提供一个表示请求细节(包括头文件)的HttpEntity对象。 execute方法允许你指定一个RequestCallback ,你可以在调用时添加这个头文件。