12

我必须调用 REST Web 服务,并且我打算使用 RestTemplate。我查看了有关如何发出 GET 请求的示例,它们如下所示。

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

就我而言,RESTful url 如下所示。在这种情况下如何使用 RestTemplate?

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

所以我的问题是如何为 GET 请求发送请求参数?

4

2 回答 2

35

占位符对任何一种类型的 url 都一样,只要做

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

或者更好的是,使用哈希图进行实名匹配-

于 2011-10-14T21:55:47.137 回答
1

在向 RESTful 服务器发出请求时,在许多情况下,它需要向服务器发送查询参数、请求正文(在请求方法的情况下)POST以及PUT请求中的标头。

在这种情况下,可以使用 UriComponentsBuilder.build() 构建 URI 字符串如果需要使用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;
}
于 2018-11-20T17:17:34.823 回答