RestTemplate GET-запрос с параметрами запроса - PullRequest
11 голосов
/ 26 августа 2011

Мне нужно позвонить в веб-службу 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?

Ответы [ 2 ]

32 голосов
/ 15 октября 2011

заполнители работают одинаково для любого типа URL, просто выполните

 String result = restTemplate.getForObject("http://example.com/hotels?state={state}&country={country}", String.class,"NY","USA");

или, что еще лучше, используйте хэш-карту для сопоставления реального имени-

0 голосов
/ 20 ноября 2018

При отправке запроса на сервер 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...