SpringCloud中RestTemplate的使用
随着微服务的广泛使用,在实际的开发中,客户端代码中调用RESTful接口也越来越常见。RestTemplate
就是 Spring 封装的处理同步 HTTP 请求的类。
一、概念定义
RestTemplate
采用同步方式执行 HTTP 请求的类,底层使用 JDK 原生HttpURLConnection
API ,或者 HttpComponents
等其他 HTTP 客户端请求类库。 RestTemplate
提供模板化的方法让开发者能更简单地发送 HTTP 请求。Spring 5开始,更推荐使用非阻塞的响应式 HTTP 请求处理类 org.springframework.web.reactive.client.WebClient
来替代 RestTemplate
,尤其是对应异步请求处理的场景上,使用方式和RestTemplate基本类似,但性能更强,吞吐更好 。
二、 RestTemplate
类的API
方法名 | 描述 |
---|---|
getForObject |
通过 GET 请求获得响应结果 |
getForEntity |
通过 GET 请求获取 ResponseEntity 对象,包容有状态码,响应头和响应数据 |
headForHeaders |
以 HEAD 请求资源返回所有响应头信息 |
postForLocation |
用 POST 请求创建资源,并返回响应数据中响应头的字段 Location 的数据 |
postForObject |
通过 PATCH 请求创建资源,获得响应结果 |
put |
通过 PUT 方式请求来创建或者更新资源 |
patchForObject |
通过 PATH 方式请求来更新资源,并获得响应结果。(JDK HttpURLConnection 不支持 PATH 方式请求,其他 HTTP 客户端库支持) |
delete |
通过 DELETE 方式删除资源 |
optionsForAllow |
通过 ALLOW 方式请求来获得资源所允许访问的所有 HTTP 方法,可用看某个请求支持哪些请求方式 |
exchange |
更通用版本的请求处理方法,接受一个 RequestEntity 对象,可以设置路径,请求头,请求信息等,最后返回一个 ResponseEntity 实体 |
execute |
最通用的执行 HTTP 请求的方法,上面所有方法都是基于 execute 的封装,全面控制请求信息,并通过回调接口获得响应数据 |
RESTful:用 URL 定位资源,用 HTTP 动词描述操作,如 GET,POST,DELETE,PUT,简单来说通过 URL 就知道访问什么资源,通过 HTTP Method 就知道执行什么操作,通过 HTTP Status Code 就知道执行结果。
三、代码示例
在学习SpringCloud时,编写服务消费者(电影微服务)时使用RestTemplate实现了基于HTTP的远程调用,调用用户微服务的RESTful API,从而查询指定id的用户信息。
1、启动类:
@SpringBootApplication
public class MovieApplication {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(MovieApplication.class, args);
}
}
2、controller层:
@RequestMapping("/movies")
@RestController
public class MovieController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/users/{id}")
public User findById(@PathVariable Long id){
// 这里用到了RestTemplate的占位符能力
User user = this.restTemplate.getForObject("http://localhost:8000/users/{id}", User.class, id);
//...微服务业务...
return user;
}
}
参考引用: