RestTemplate 使用教程

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

RestTemplate 是 Spring 框架提供的一种用于实行HTTP请求的同步客户端。它简化了与HTTP服务器的交互,并支持RESTful Web服务。
1. 添加依赖

起首,确保你的项目中包罗了Spring Web的支持。假如你使用的是Maven,在pom.xml文件中添加如下依赖:
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
复制代码
2. 创建 RestTemplate 实例

你可以直接通过构造函数创建一个 RestTemplate 对象,大概更推荐地,使用RestTemplateBuilder 来构建,这样可以更轻易地配置如超时时间等属性。
直接创建:
  1. RestTemplate restTemplate = new RestTemplate();
复制代码
在 Spring 应用中自动装配 RestTemplate
  1. @Autowired
  2. private RestTemplate restTemplate;
复制代码
使用 RestTemplateBuilder 创建:
  1. @Bean
  2. public RestTemplate restTemplate(RestTemplateBuilder builder) {
  3.     return builder
  4.             .setConnectTimeout(Duration.ofMillis(3000))
  5.             .setReadTimeout(Duration.ofMillis(3000))
  6.             .build();
  7. }
复制代码
3. 发送 GET 请求



  • 获取简单类型数据:
  1. String result = restTemplate.getForObject("http://example.com/api/data", String.class);
  2. System.out.println(result);
复制代码


  • 获取复杂对象:
  1. DataObject data = restTemplate.getForObject("http://example.com/api/data", DataObject.class);
复制代码


  • 使用参数:
  1. Map<String, String> params = Collections.singletonMap("id", "42");
  2. DataObject data = restTemplate.getForObject("http://example.com/api/data/{id}", DataObject.class, params);
复制代码
4. 发送POST请求



  • 发送简单的表单数据:
  1. HttpHeaders headers = new HttpHeaders();
  2. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  3. MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
  4. map.add("key1", "value1");
  5. map.add("key2", "value2");
  6. HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
  7. ResponseEntity<String> response = restTemplate.postForEntity("http://example.com/api/submit", request, String.class);
复制代码


  • 发送JSON数据:
  1. MyRequestObject obj = new MyRequestObject();
  2. obj.setField1("value1");
  3. HttpHeaders headers = new HttpHeaders();
  4. headers.setContentType(MediaType.APPLICATION_JSON);
  5. HttpEntity<MyRequestObject> entity = new HttpEntity<>(obj, headers);
  6. ResponseEntity<String> response = restTemplate.postForEntity("http://example.com/api/submit", entity, String.class);
复制代码
5.发送 DELETE 请求

DELETE 请求通常用于删除资源。你可以使用 delete 方法来发送一个简单的 DELETE 请求,大概使用 exchange 方法来更灵活地控制请求头等信息。 


  • 简单 DELETE 请求:
  1. restTemplate.delete("http://example.com/api/resource/42");
复制代码


  • 带参数的 DELETE 请求:
 假如必要传递额外的参数,可以使用 UriComponentsBuilder 来构建 URL。
  1. UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://example.com/api/resource/{id}")
  2.     .queryParam("param1", "value1");
  3. restTemplate.delete(builder.buildAndExpand(42).toUri());
复制代码


  • 自界说请求头的 DELETE 请求:
 必要设置自界说请求头,可以使用 HttpEntity<Void> 结合 exchange 方法。
  1. HttpHeaders headers = new HttpHeaders();
  2. headers.set("Authorization", "Bearer your_token_here");
  3. HttpEntity<Void> entity = new HttpEntity<>(headers);
  4. restTemplate.exchange("http://example.com/api/resource/42",
  5.                       HttpMethod.DELETE,
  6.                       entity,
  7.                       Void.class);
复制代码
6.发送 PUT 请求



  • 发送简单的 PUT 请求:
  1. MyRequestObject obj = new MyRequestObject();
  2. obj.setField1("new_value1");
  3. HttpHeaders headers = new HttpHeaders();
  4. headers.setContentType(MediaType.APPLICATION_JSON);
  5. HttpEntity<MyRequestObject> request = new HttpEntity<>(obj, headers);
  6. restTemplate.put("http://example.com/api/resource/42", request);
复制代码


  • 处置惩罚相应:
得到服务器返回的数据,可以使用 exchange 方法,并指定相应类型。 
  1. ResponseEntity<String> response = restTemplate.exchange(
  2.     "http://example.com/api/resource/42",
  3.     HttpMethod.PUT,
  4.     request,
  5.     String.class
  6. );
  7. System.out.println(response.getBody());
复制代码


  • 带路径变量的 PUT 请求:
  1. Map<String, String> params = Collections.singletonMap("id", "42");
  2. restTemplate.put("http://example.com/api/resource/{id}", request, params);
复制代码
7. 处置惩罚错误

RestTemplate 会抛出一些异常,如 ResourceAccessException、HttpClientErrorException 和 HttpServerErrorException。你可以捕获这些异常来处置惩罚差别的 HTTP 错误:
  1. restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
  2.     @Override
  3.     public void handleError(ClientHttpResponse response) throws IOException {
  4.         // 自定义异常处理逻辑
  5.     }
  6. });
复制代码
8. 使用 ResponseEntity

RestTemplate 还提供了 ResponseEntity 类型,它允许你访问完整的 HTTP 相应,包括状态码和相应头:
  1. ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
  2. if (response.getStatusCode().is2xxSuccessful()) {
  3.     String body = response.getBody();
  4.     // 处理响应体
  5. }
复制代码
注意事项



  • RestTemplate 是一个同步的客户端,假如你必要异步操作,可以考虑使用 WebClient。
  • 从 Spring Framework 5 开始,RestTemplate 被标志为过时,推荐使用 WebClient,它提供了更现代的异步、非阻塞的 API。
  • 确保在使用 RestTemplate 时处置惩罚好异常和错误环境。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表