RestTemplete请求模板类解读

当我们服务消费者去调用服务提供者提供的服务的时候,使用了一个极其方便的对象RestTemplate,我们通常使用RestTemplate中最简单的一个功能getForObject 发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能非常强大, 接下来我们就来详细的看一下RestTemplate中几种常见请求方法的使用,在日常操作中,基于Rest的方式通常是四种情况,它们分别是:

  • GET 请求 --查询数据
  • POST 请求 –添加数据
  • PUT 请求 – 修改数据
  • DELETE 请求 –删除数据

下面我们逐一解读;

  • RestTemplate 的 GET 请求

Get 请求可以有两种方式:

第一种getForEntity

该方法返回一个 ResponseEntity<T>对象,ResponseEntity<T>SpringHTTP 请求响应的封装,包括了几个重要的元素,比如响应码、contentTypecontentLength、响应消息体等;

ResponseEntity<String> responseEntity =restTemplate.getForEntity(
"http://29-SPRINGCLOUD-SERVICE-PROVIDER/service/hello", String.class);

String body =responseEntity.getBody(); 
HttpStatus statusCode =responseEntity.getStatusCode(); 
int statusCodeValue =responseEntity.getStatusCodeValue(); 
HttpHeaders headers =responseEntity.getHeaders(); 

System.out.println(body); 
System.out.println(statusCode); 
System.out.println(statusCodeValue); 
System.out.println(headers);

以上代码:
getForEntity 方法第一个参数为要调用的服务的地址,即服务提供者提供的
http://29-SPRINGCLOUD-SERVICE-PROVIDER/service/hello 接口地址,注意这里是通过服务名调用而不是服务地址,如果改为服务地址就无法使用 Ribbon 实现客户端负载均衡了;

getForEntity方法第二个参数String.class表示希望返回的body类型是 String类型,如果希望返回一个对象,也是可以的,比如User对象;
另外两个重载方法:

public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables) throws RestClientException 

比如:

restTemplate.getForEntity("http://01-SPRINGCLOUD-SERVICE-PROVIDER/service/hello?id= {1}&name={2}", String.class, "{1, '张无忌'}").getBody(); 
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException 

比如:

Map<String, Object> paramMap =new ConcurrentHashMap<>(); 
paramMap.put("id", 1); 
paramMap.
put("name", "张无忌"); 
restTemplate.getForEntity("http://01-SPRINGCLOUD-SERVICE-PROVIDER/service/hello?id= {id}&name={name}", String.class, paramMap).getBody(); 

第二种:getForObject()与 getForEntity 使用类似,只不过getForObject是在getForEntity基础上进行了再次封装,可以将http的响应体body信息转化成指定的对象,方便我们的代码开发;

当你不需要返回响应中的其他信息,只需要body体信息的时候,可以使用这个更方便;
它也有两个重载的方法,和 getForEntity 相似;

<T> T getForObject(URI url, Class<T> responseType) throws RestClientException; 
<T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientException; 
<T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException; 
RestTemplate 的 POST 请求: 
Post 与 Get 请求非常类似: 
restTemplate.postForObject() 
restTemplate.postForEntity() 
restTemplate.postForLocation() 
RestTemplate 的 PUT 请求: 
restTemplate.put(); 
RestTemplate 的 DELETE 请求: 
restTemplate.delete(); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值