一、RestTemplate简介
RestTemplate是Spring提供的一个用于访问REST服务的客户端。它提供了多种HTTP请求的方法,比如GET、POST、PUT、DELETE等,能够方便地访问RESTful接口,并处理响应信息。在Spring Boot中,使用RestTemplate是非常简单的,我们只需要在容器中注入RestTemplate即可。
二、RestTemplate Exchange方法
RestTemplate的Exchange方法是实现HTTP请求和响应的核心方法。Exchange方法的参数中除了URL和HTTP请求方法外,还可以指定请求头、请求体、响应类型等信息。通过这些参数,我们能够非常自由地构造HTTP请求,获取对应的HTTP响应。 下面是一个简单的Exchange方法的使用示例:
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/user/{id}";
Map<String, String> uriVariables = new HashMap<>();
uriVariables.put("id", "1");
ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, User.class, uriVariables);
User user = responseEntity.getBody();
上面的代码中,我们构造了一个GET方法的HTTP请求,访问了 http://localhost:8080/user/1 这个URL,并指定了响应类型为 User.class
。RestTemplate通过Exchange方法发送请求,并获取了对应的HTTP响应,我们通过 responseEntity.getBody()
获取到了响应体的内容。
三、RestTemplate Exchange方法参数解析
RestTemplate Exchange方法的参数比较多,我们需要逐一分析各个参数的含义和使用方法。
1、URL
URL是我们要访问的HTTP接口的地址,可包含传递参数。我们可以直接把URL和参数拼接在一起,也可以使用占位符方式传递参数。
占位符 {}
的数量和 uriVariables
中的键值对数量应该是一致的,RestTemplate会自动按照顺序替换占位符。
String url = "http://127.0.0.1:8080/user/{id}";
Map<String, Object> uriVariables = new HashMap<>();
uriVariables.put("id", "1001");
ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, User.class, uriVariables);
User user = responseEntity.getBody();
2、HTTP方法
HTTP方法是我们要访问的HTTP接口的请求方式,通常是GET、POST、PUT、DELETE等。
RestTemplate中提供了 HttpMethod
这个枚举类型,可以将几种HTTP请求方式封装为常量,便于使用。
String url = "http://127.0.0.1:8080/user";
User user = new User();
user.setId("1001");
user.setName("张三");
ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(user), User.class);
User result = responseEntity.getBody();
3、请求头
请求头是HTTP请求中一部分,包含了HTTP请求的元数据信息。常见的请求头包括 User-Agent
、Content-Type
、Content-Length
等。可以通过 HttpHeaders
对象来设置请求头,RestTemplate在发送请求时会将 HttpHeaders
对象中的请求头信息合并到HTTP请求中。
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
String url = "http://127.0.0.1:8080/user/1001";
ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), User.class);
User user = responseEntity.getBody();
4、请求体
请求体是一部分请求内容,通常在使用POST或PUT请求时需要用到。请求体通常是一个封装了请求参数的对象。我们可以使用 HttpEntity
对象来封装请求体,RestTemplate在发送请求时会将 HttpEntity
中的请求体信息合并到HTTP请求中。
String url = "http://127.0.0.1:8080/user";
User user = new User();
user.setId("1001");
user.setName("张三");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(user, headers), User.class);
User result = responseEntity.getBody();
5、URI变量
URI变量是URL中的占位符,可以动态设置URL中的值。我们可以使用 Map
来封装URI变量,RestTemplate在发送请求时会根据 Map
中的键值对来动态地设置URL中的占位符。
String url = "http://127.0.0.1:8080/user/{id}";
Map<String, Object> uriVariables = new HashMap<>();
uriVariables.put("id", "1001");
ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, User.class, uriVariables);
User user = responseEntity.getBody();
6、查询参数
查询参数是URL的一部分,可以在URL的尾部通过 ?
和 &
符号进行传递。我们可以使用 UriComponentsBuilder
来构建带查询参数的URL,也可以通过参数map的方式来设置查询参数。
String url = UriComponentsBuilder.fromHttpUrl("http://127.0.0.1:8080/user").queryParam("name", "张三").toUriString();
ResponseEntity<User[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, User[].class);
User[] users = responseEntity.getBody();
7、响应类型
响应类型是用来指定RestTemplate在获取HTTP响应后如何将响应内容转换为Java对象的。常见的响应类型包括 String
、User
、List<User>
、Map<String, Object>
等。在Exchange方法的最后一个参数中指定即可。
String url = "http://127.0.0.1:8080/user/1001";
ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, User.class);
User user = responseEntity.getBody();
四、总结
在Spring Boot中使用RestTemplate非常简单,通过Exchange方法,我们可以方便地构造各种HTTP请求,获取对应的HTTP响应,并将响应内容转换为Java对象。需要注意的是,Exchange方法的参数比较多,需要逐一了解并掌握各个参数的含义和使用方法。