RESTTemplate 是 Spring 框架中的一个 HTTP 客户端工具类,可以用于编写 RESTful 的 web 服务的客户端。在 RESTful 服务中,我们可以使用各种 HTTP 请求方式(例如 GET、POST、PUT、DELETE 等)来操作指定的资源。RESTTemplate 提供了对以上 HTTP 请求方式简便的封装,使得我们可以在 Java 代码中调用 RESTful 服务。
当使用 RESTTemplate 来调用 RESTful 服务时,我们可以使用 exchange 方法传递参数。Exchange 方法的语法如下:
public <T> ResponseEntity<T> exchange(String url,
HttpMethod method,
HttpEntity<?> requestEntity,
Class<T> responseType,
Object... uriVariables)
throws RestClientException;
其中,uriVariables 参数是用于传递 RESTful 服务所需要的参数的一个数组。我们可以将这些参数以顺序方式填充到该数组中,RESTTemplate 会自动将这些参数转换成 URL 的查询参数。
下面是一个例子,使用 RESTTemplate 发送一个 GET 请求并传递一个参数:
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/user/{id}";
Map<String, String> pathVariables = new HashMap<>();
pathVariables.put("id", "123");
String result = restTemplate.getForObject(url, String.class, pathVariables);
在上面的示例中,我们将 ID 参数传递给 RESTful 服务,使用了 GET 请求方法。在 URL 中使用了占位符 "{id}",并且将参数填充到 pathVariables 参数中。最后,我们通过 resttemplate 的 getForObject 方法获取到服务端的返回结果。
需要注意的是如果参数是从表单中传入的话,可以使用 MultiValueMapWrapper 对参数进行封装,例如:
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
paramMap.add("name", "张三");
paramMap.add("age", 18);
HttpHeaders headers = getHeaders();
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(paramMap, headers);
restTemplate.postForObject(url, requestEntity, String.class, pathVariables);
这种情况下,我们使用 postForObject 方法来发送 POST 请求,并通过 requestEntity 参数传递了表单数据。