当我们服务消费者去调用服务提供者提供的服务的时候,使用了一个极其方便的对象RestTemplate,我们通常使用RestTemplate中最简单的一个功能getForObject 发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能非常强大, 接下来我们就来详细的看一下RestTemplate中几种常见请求方法的使用,在日常操作中,基于Rest的方式通常是四种情况,它们分别是:
- GET 请求 --查询数据
- POST 请求 –添加数据
- PUT 请求 – 修改数据
- DELETE 请求 –删除数据
下面我们逐一解读;
- RestTemplate 的 GET 请求
Get 请求可以有两种方式:
第一种:getForEntity
该方法返回一个 ResponseEntity<T>对象,ResponseEntity<T>是 Spring 对 HTTP 请求响应的封装,包括了几个重要的元素,比如响应码、contentType、 contentLength、响应消息体等;
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();
本文详细讲解了如何在Spring Cloud中使用RestTemplate进行GET、POST、PUT、DELETE操作,并介绍了如何通过@LoadBalanced实现客户端负载均衡。通过getForObject方法简化请求处理,涵盖了多种参数传递方式。
5469

被折叠的 条评论
为什么被折叠?



