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);
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()
を使用して結果を取得します。
この質問は this question に似ています。
RestTemplateのJavaDoc を見てください。
対応する getForObject
メソッドはpostForObject
と同等のHTTP GETですが、「GET with headers」の要件を満たしていないようです。呼び出しのヘッダーを指定する方法はありません。
JavaDocを見ると、HTTP GET固有のメソッドではヘッダー情報も提供できません。ただし、代替手段があり、そのうちの1つを見つけて使用しています。 exchange
メソッドを使用すると、リクエストの詳細(ヘッダーを含む)を表すHttpEntity
オブジェクトを提供できます。 execute
メソッドを使用すると、呼び出し時にヘッダーを追加できるRequestCallback
を指定できます。