restTemplate.getforobject(),exchange(),entity()。每个方法有什么优缺点吗?

时间:2018-02-12 07:16:44

标签: spring resttemplate

我已经使用了entity(),exchange(),getforObject(),而且似乎一切正常。但不确定哪种方法适用于不同场景..请提供更多关于各种方法的信息,比如优缺点,哪里可以使用哪里不用。

2 个答案:

答案 0 :(得分:5)

您实际上可以通过RestTemplate的docs来了解这些方法的用途。没有利弊。每种方法都有其自身的用途。

getforObject():发送HTTP GET请求,返回从a映射的对象 回应机构。

 @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public @ResponseBody Employee employeeById(@PathVariable long id) {
       return employeeRepository.findEmp(id);
    }

如果存储库无法找到给定ID的任何员工,则null响应将以状态200(OK)发送。但实际上,存在问题。找不到数据。应该发送200(OK),而不是发送404(Not Found)。因此,其中一种方法是发送ResponseEntity(其中包含与响应相关的更多元数据(标题/状态代码)。)

@RequestMapping(value="/{id}", method=RequestMethod.GET)
 public ResponseEntity<Employee> employeeById(@PathVariable long id) {
   Employee employee = employeeRepository.findEmp(id);
   HttpStatus status = HttpStatus.NOT_FOUND;
   if(employee != null ){
     status = HttpStatus.OK; 
   }       
   return new ResponseEntity<Employee>(employee, status);
}

在这里,客户端将知道其请求的确切状态。

exchange:对URL执行指定的HTTP方法,返回一个 ResponseEntity包含从响应正文映射的对象

答案 1 :(得分:1)

method documentation非常清楚:

交换:

  

对给定的URI模板执行HTTP方法,编写   给定请求实体的请求,并返回响应   ResponseEntity。 URI模板变量使用给定的扩展   URI变量(如果有)。

getForObject:

  

通过在指定的URL上进行GET检索表示形式。的   响应(如果有)被转换并返回。 URI模板变量   使用给定的URI变量(如果有)进行扩展。

getForEntity:

  

通过在指定的URL上进行GET检索实体。响应   被转换并存储在ResponseEntity中。 URI模板变量   使用给定的URI变量(如果有)进行扩展。

这里的重点是,RestTemplate方法和Http请求方法具有相同的逻辑。可以使用GET请求,getForEntity和getForObject方法。这些方法之间的区别是,getForEntity响应被转换并存储在ResponseEntity中。另一方面,getForObject响应可以转换为任何类。Exchange可以使用任何http请求执行。exchange返回类型为ResponseEntity<T>,execute为T