RestTemplate 是 Spring 框架提供的一种用于实行HTTP请求的同步客户端。它简化了与HTTP服务器的交互,并支持RESTful Web服务。
1. 添加依赖
起首,确保你的项目中包罗了Spring Web的支持。假如你使用的是Maven,在pom.xml文件中添加如下依赖:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
复制代码 2. 创建 RestTemplate 实例
你可以直接通过构造函数创建一个 RestTemplate 对象,大概更推荐地,使用RestTemplateBuilder 来构建,这样可以更轻易地配置如超时时间等属性。
直接创建:
- RestTemplate restTemplate = new RestTemplate();
复制代码 在 Spring 应用中自动装配 RestTemplate
- @Autowired
- private RestTemplate restTemplate;
复制代码 使用 RestTemplateBuilder 创建:
- @Bean
- public RestTemplate restTemplate(RestTemplateBuilder builder) {
- return builder
- .setConnectTimeout(Duration.ofMillis(3000))
- .setReadTimeout(Duration.ofMillis(3000))
- .build();
- }
复制代码 3. 发送 GET 请求
- String result = restTemplate.getForObject("http://example.com/api/data", String.class);
- System.out.println(result);
复制代码
- DataObject data = restTemplate.getForObject("http://example.com/api/data", DataObject.class);
复制代码
- Map<String, String> params = Collections.singletonMap("id", "42");
- DataObject data = restTemplate.getForObject("http://example.com/api/data/{id}", DataObject.class, params);
复制代码 4. 发送POST请求
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
- map.add("key1", "value1");
- map.add("key2", "value2");
- HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
- ResponseEntity<String> response = restTemplate.postForEntity("http://example.com/api/submit", request, String.class);
复制代码
- MyRequestObject obj = new MyRequestObject();
- obj.setField1("value1");
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
- HttpEntity<MyRequestObject> entity = new HttpEntity<>(obj, headers);
- ResponseEntity<String> response = restTemplate.postForEntity("http://example.com/api/submit", entity, String.class);
复制代码 5.发送 DELETE 请求
DELETE 请求通常用于删除资源。你可以使用 delete 方法来发送一个简单的 DELETE 请求,大概使用 exchange 方法来更灵活地控制请求头等信息。
- restTemplate.delete("http://example.com/api/resource/42");
复制代码
假如必要传递额外的参数,可以使用 UriComponentsBuilder 来构建 URL。
- UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://example.com/api/resource/{id}")
- .queryParam("param1", "value1");
- restTemplate.delete(builder.buildAndExpand(42).toUri());
复制代码
必要设置自界说请求头,可以使用 HttpEntity<Void> 结合 exchange 方法。
- HttpHeaders headers = new HttpHeaders();
- headers.set("Authorization", "Bearer your_token_here");
- HttpEntity<Void> entity = new HttpEntity<>(headers);
- restTemplate.exchange("http://example.com/api/resource/42",
- HttpMethod.DELETE,
- entity,
- Void.class);
复制代码 6.发送 PUT 请求
- MyRequestObject obj = new MyRequestObject();
- obj.setField1("new_value1");
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
- HttpEntity<MyRequestObject> request = new HttpEntity<>(obj, headers);
- restTemplate.put("http://example.com/api/resource/42", request);
复制代码
得到服务器返回的数据,可以使用 exchange 方法,并指定相应类型。
- ResponseEntity<String> response = restTemplate.exchange(
- "http://example.com/api/resource/42",
- HttpMethod.PUT,
- request,
- String.class
- );
- System.out.println(response.getBody());
复制代码
- Map<String, String> params = Collections.singletonMap("id", "42");
- restTemplate.put("http://example.com/api/resource/{id}", request, params);
复制代码 7. 处置惩罚错误
RestTemplate 会抛出一些异常,如 ResourceAccessException、HttpClientErrorException 和 HttpServerErrorException。你可以捕获这些异常来处置惩罚差别的 HTTP 错误:
- restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
- @Override
- public void handleError(ClientHttpResponse response) throws IOException {
- // 自定义异常处理逻辑
- }
- });
复制代码 8. 使用 ResponseEntity
RestTemplate 还提供了 ResponseEntity 类型,它允许你访问完整的 HTTP 相应,包括状态码和相应头:
- ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
- if (response.getStatusCode().is2xxSuccessful()) {
- String body = response.getBody();
- // 处理响应体
- }
复制代码 注意事项
- RestTemplate 是一个同步的客户端,假如你必要异步操作,可以考虑使用 WebClient。
- 从 Spring Framework 5 开始,RestTemplate 被标志为过时,推荐使用 WebClient,它提供了更现代的异步、非阻塞的 API。
- 确保在使用 RestTemplate 时处置惩罚好异常和错误环境。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |