web-dev-qa-db-ja.com

RestTemplateGETリクエストとリクエストパラメータ

REST Webサービスを呼び出す必要があり、RestTemplateを使用する予定です。GETリクエストの作成方法の例を見て、以下のようになります。

 String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class,"42","21");

私の場合、RESTfulURLは次のようなものです。この場合、RestTemplateをどのように使用しますか?

http://example.com/hotels?state=NY&country=USA

だから私の質問は、GETリクエストのリクエストパラメータをどのように送信するのですか?

12
Chandra

プレースホルダーはどちらのタイプのURLでも同じように機能します。

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

またはさらに良いことに、本名の照合にはハッシュマップを使用します-

32
chrismarx

RESTfulサーバーにリクエストを送信する際、多くの場合、クエリパラメータ、リクエスト本文(POSTおよびPUTリクエストメソッドの場合)、およびリクエストのヘッダーを送信する必要があります。サーバーに。

このような場合、URI文字列は riComponentsBuilder.build() を使用して構築し、必要に応じて riComponents.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;
}
1
noob