原文: 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类(例如JdbcTemplateJmsTemplate)相同,为执行复杂任务提供了具有默认行为的简化方法。

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

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

阅读更多:带有HttpClientRestTemplate 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 RestTemplateHttpClient配置示例

Spring Boot RestTemplate GET 示例

Spring Boot RestTemplate POST 示例

带有RestTemplate的 Spring Boot JUnit 示例

带有标题示例的 Spring boot TestRestTemplate POST 示例

带有RestTemplate的 Spring ClientHttpRequestInterceptor

学习愉快!