Запрос RestTemplate GET с параметрами запроса
Мне нужно вызвать веб-сервис REST, и я планирую использовать RestTemplate. Я посмотрел примеры того, как сделать запрос GET, и они показаны ниже.
String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class,"42","21");
В моем случае URL-адрес RESTful - это что-то вроде ниже. Как использовать RestTemplate в этом случае?
http://example.com/hotels?state=NY&country=USA
Итак, мой вопрос заключается в том, как отправить параметры запроса для запросов GET?
Ответы
Ответ 1
заполнители работают одинаково для любого типа URL-адреса, просто
String result = restTemplate.getForObject("http://example.com/hotels?state={state}&country={country}", String.class,"NY","USA");
или еще лучше, используйте hashmap для реального сопоставления имен -
Ответ 2
При выполнении запроса к серверу RESTful во многих случаях требуется отправлять параметры запроса, тело запроса (в случае методов запроса POST
и PUT
), а также заголовки в запросе на сервер.
В таких случаях строка URI может быть построена с использованием UriComponentsBuilder.build(), закодирована с помощью UriComponents.encode(), если необходимо, и отправлена с использованием RestTemplate.exchange() следующим образом:
public ResponseEntity<String> requestRestServerWithGetMethod()
{
HttpEntity<?> entity = new HttpEntity<>(requestHeaders); // requestHeaders is of HttpHeaders type
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(rawValidUrl) // rawValidURl = http://example.com/hotels
.queryParams(
(LinkedMultiValueMap<String, String>) allRequestParams); // The allRequestParams must have been built for all the query params
UriComponents uriComponents = builder.build().encode(); // encode() is to ensure that characters like {, }, are preserved and not encoded. Skip if not needed.
ResponseEntity<Object> responseEntity = restTemplate.exchange(uriComponents.toUri(), HttpMethod.GET,
entity, String.class);
return responseEntity;
}
public ResponseEntity<String> requestRestServerWithPostMethod()
{
HttpEntity<?> entity = new HttpEntity<>(requestBody, requestHeaders); // requestBody is of string type and requestHeaders is of type HttpHeaders
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(rawValidUrl) // rawValidURl = http://example.com/hotels
.queryParams(
(LinkedMultiValueMap<String, String>) allRequestParams); // The allRequestParams must have been built for all the query params
UriComponents uriComponents = builder.build().encode(); // encode() is to ensure that characters like {, }, are preserved and not encoded. Skip if not needed.
ResponseEntity<Object> responseEntity = restTemplate.exchange(uriComponents.toUri(), HttpMethod.POST,
entity, String.class);
return responseEntity;
}