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