1. ホーム
  2. java

RestTemplateです。URLとクエリパラメータを一緒に送信する方法

2023-10-17 02:33:42

質問

URLにパスパラメータとクエリパラメータを渡そうとしているのですが、変なエラーが出ます。

    String url = "http://test.com/Services/rest/{id}/Identifier"
    Map<String, String> params = new HashMap<String, String>();
    params.put("id", "1234");
    UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
                                        .queryParam("name", "myName");
    String uriBuilder = builder.build().encode().toUriString();
    restTemplate.exchange(uriBuilder , HttpMethod.PUT, requestEntity,
                    class_p, params);

で、URLは http://test.com/Services/rest/%7Bid%7D/Identifier?name=myName

私はそれを動作させるために何をすべきか。私は http://test.com/Services/rest/{id}/Identifier?name=myName で、paramsがidをurlに追加してくれます。

提案してください。

どのように解決するのですか?

私なら buildAndExpand から UriComponentsBuilder を使って、すべてのタイプのURIパラメータを渡すことができます。

例えば

String url = "http://test.com/solarSystem/planets/{planet}/moons/{moon}";

// URI (URL) parameters
Map<String, String> urlParams = new HashMap<>();
urlParams.put("planet", "Mars");
urlParams.put("moon", "Phobos");

// Query parameters
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
        // Add query parameter
        .queryParam("firstName", "Mark")
        .queryParam("lastName", "Watney");

System.out.println(builder.buildAndExpand(urlParams).toUri());
/**
 * Console output:
 * http://test.com/solarSystem/planets/Mars/moons/Phobos?firstName=Mark&lastName=Watney
 */

restTemplate.exchange(builder.buildAndExpand(urlParams).toUri() , HttpMethod.PUT,
        requestEntity, class_p);

/**
 * Log entry:
 * org.springframework.web.client.RestTemplate Created PUT request for "http://test.com/solarSystem/planets/Mars/moons/Phobos?firstName=Mark&lastName=Watney"
 */