原文: https://howtodoinjava.com/spring-boot2/resttemplate/spring-restful-client-resttemplate-example/

在学习为 XML 表示形式和 JSON 表示形式构建 Spring REST API 之后,让我们构建 Spring REST 客户端以使用我们编写的 API 在链接的示例中。

在 Spring 应用程序内部访问第三方 REST 服务的过程涉及 Spring RestTemplate类的使用。 RestTemplate类的设计原理与许多其他 Spring *Template类(例如JdbcTemplate和JmsTemplate)相同,为执行复杂任务提供了具有默认行为的简化方法。

鉴于RestTemplate类是为调用 REST 服务设计的,因此它的主要方法与 REST 的基础紧密结合在一起就不足为奇了,REST 的基础是 HTTP 协议的方法:HEAD,GET,POST,PUT,DELETE 和 OPTION。 例如,RestTemplate类具有方法headForHeaders(),getForObject(),postForObject(),put()和delete()等。

阅读更多和源代码: Spring REST 示例 – JSON

阅读更多:带有 HttpClient 的 RestTemplate Java 配置

1. Spring RestTemplate – HTTP GET 方法示例

1.1. XML 响应

REST API 代码

用于 HTTP GET 方法的 Spring REST API。

  1. @RequestMapping(value = "/employees", produces = MediaType.APPLICATION_XML_VALUE, method = RequestMethod.GET)
  2. public String getAllEmployeesXML(Model model)
  3. {
  4. model.addAttribute("employees", getEmployeesCollection());
  5. return "xmlTemplate";
  6. }

REST 客户端代码

Spring REST 客户端使用RestTemplate访问 HTTP GET api 请求。

  1. private static void getEmployees()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees.xml";
  4. RestTemplate restTemplate = new RestTemplate();
  5. String result = restTemplate.getForObject(uri, String.class);
  6. System.out.println(result);
  7. }

1.2. JSON 响应

REST API 代码

  1. @RequestMapping(value = "/employees", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
  2. public String getAllEmployeesJSON(Model model)
  3. {
  4. model.addAttribute("employees", getEmployeesCollection());
  5. return "jsonTemplate";
  6. }

REST 客户端代码

  1. private static void getEmployees()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees.json";
  4. RestTemplate restTemplate = new RestTemplate();
  5. String result = restTemplate.getForObject(uri, String.class);
  6. System.out.println(result);
  7. }

1.3. 使用RestTemplate的自定义 HTTP 标头

REST API 代码

  1. @RequestMapping(value = "/employees", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
  2. public String getAllEmployeesJSON(Model model)
  3. {
  4. model.addAttribute("employees", getEmployeesCollection());
  5. return "jsonTemplate";
  6. }

REST 客户端代码

  1. private static void getEmployees()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees";
  4. RestTemplate restTemplate = new RestTemplate();
  5. HttpHeaders headers = new HttpHeaders();
  6. headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
  7. HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
  8. ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);
  9. System.out.println(result);
  10. }

1.4. 获取响应作为对象

REST API 代码

  1. @RequestMapping(value = "/employees", produces = MediaType.APPLICATION_XML_VALUE, method = RequestMethod.GET)
  2. public String getAllEmployeesXML(Model model)
  3. {
  4. model.addAttribute("employees", getEmployeesCollection());
  5. return "xmlTemplate";
  6. }

REST 客户端代码

  1. private static void getEmployees()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees";
  4. RestTemplate restTemplate = new RestTemplate();
  5. EmployeeListVO result = restTemplate.getForObject(uri, EmployeeListVO.class);
  6. System.out.println(result);
  7. }

1.5. URL 参数

REST API 代码

  1. @RequestMapping(value = "/employees/{id}")
  2. public ResponseEntity<EmployeeVO> getEmployeeById (@PathVariable("id") int id)
  3. {
  4. if (id <= 3) {
  5. EmployeeVO employee = new EmployeeVO(1,"Lokesh","Gupta","howtodoinjava@gmail.com");
  6. return new ResponseEntity<EmployeeVO>(employee, HttpStatus.OK);
  7. }
  8. return new ResponseEntity(HttpStatus.NOT_FOUND);
  9. }

REST 客户端代码

  1. private static void getEmployeeById()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees/{id}";
  4. Map<String, String> params = new HashMap<String, String>();
  5. params.put("id", "1");
  6. RestTemplate restTemplate = new RestTemplate();
  7. EmployeeVO result = restTemplate.getForObject(uri, EmployeeVO.class, params);
  8. System.out.println(result);
  9. }

2. Spring RestTemplate – HTTP POST 方法示例

REST API 代码

用于 HTTP POST 方法的 Spring REST API。

  1. @RequestMapping(value = "/employees", method = RequestMethod.POST)
  2. public ResponseEntity<String> createEmployee(@RequestBody EmployeeVO employee)
  3. {
  4. System.out.println(employee);
  5. return new ResponseEntity(HttpStatus.CREATED);
  6. }

REST 客户端代码

Spring REST 客户端使用RestTemplate访问 HTTP POST api 请求。

  1. private static void createEmployee()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees";
  4. EmployeeVO newEmployee = new EmployeeVO(-1, "Adam", "Gilly", "test@email.com");
  5. RestTemplate restTemplate = new RestTemplate();
  6. EmployeeVO result = restTemplate.postForObject( uri, newEmployee, EmployeeVO.class);
  7. System.out.println(result);
  8. }

3. Spring RestTemplate – HTTP PUT 方法示例

REST API 代码

用于 HTTP PUT 方法的 Spring REST API。

  1. @RequestMapping(value = "/employees/{id}", method = RequestMethod.PUT)
  2. public ResponseEntity<EmployeeVO> updateEmployee(@PathVariable("id") int id, @RequestBody EmployeeVO employee)
  3. {
  4. System.out.println(id);
  5. System.out.println(employee);
  6. return new ResponseEntity<EmployeeVO>(employee, HttpStatus.OK);
  7. }

REST 客户端代码

Spring REST 客户端使用RestTemplate访问 HTTP PUT api 请求。

  1. private static void updateEmployee()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees/{id}";
  4. Map<String, String> params = new HashMap<String, String>();
  5. params.put("id", "2");
  6. EmployeeVO updatedEmployee = new EmployeeVO(2, "New Name", "Gilly", "test@email.com");
  7. RestTemplate restTemplate = new RestTemplate();
  8. restTemplate.put ( uri, updatedEmployee, params);
  9. }

4. Spring RestTemplate – HTTP DELETE 方法示例

REST API 代码

用于 HTTP DELETE 方法的 Spring REST API。

  1. @RequestMapping(value = "/employees/{id}", method = RequestMethod.DELETE)
  2. public ResponseEntity<String> updateEmployee(@PathVariable("id") int id)
  3. {
  4. System.out.println(id);
  5. return new ResponseEntity(HttpStatus.OK);
  6. }

REST 客户端代码

Spring REST 客户端使用RestTemplate访问 HTTP DELETE api 请求。

  1. private static void deleteEmployee()
  2. {
  3. final String uri = "http://localhost:8080/springrestexample/employees/{id}";
  4. Map<String, String> params = new HashMap<String, String>();
  5. params.put("id", "2");
  6. RestTemplate restTemplate = new RestTemplate();
  7. restTemplate.delete ( uri, params );
  8. }

随意复制和修改以上 Spring RestTemplate示例,以在您的 MVC 应用程序中构建 Spring REST 客户端

5. 更多的RestTemplate示例

Spring RestTemplate基本身份验证示例
Spring RestTemplate超时配置示例
Spring RestTemplateBuilder示例
Spring RestTemplate – HttpClient配置示例
Spring Boot RestTemplate GET 示例
Spring Boot RestTemplate POST 示例
带有RestTemplate的 Spring Boot JUnit 示例
带有标头的 Spring boot TestRestTemplate POST 示例
带有RestTemplate的 Spring ClientHttpRequestInterceptor

学习愉快!