Spring cloud RestTemplate的一些理解

RestTemplate :

 该对象会使用 Ribbon 的自动化配置, 同时通过配置 @LoadBalanced 还能够开启客户端负载均衡

 GET请求

第一 种:getForEntity 函数。该方法返回的是 ResponseEntity该对象是 Spring对 HTTP 请求响应的封装

下面的例子,

就是访问 USER-SERVER 服务的 /user 请求, 同时最后一 个参数didi 会替换 url 中的{ 1} 占位符, 而返回的 ResponseEntity 对象中的 body 内容类型会根据第二个参数转换为 String 类型。

RestTemplate restTemplate = new RestTemplate();
ResponseEntity responseEntity = restTemplate.getForEntity
    ("http://USER-­SERVICE/user?name = {1} ", String. class, "didi");
String body = responseEntity.getBody () ;

若我们希望返回的 body 是一 个User 对象类型

ResponseEntity responseEntity = restTemplate.getForEntity
    ("http://USER­-SERVICE/user?name = {l}", User.class, "didi");

并且getForEntity有三种重载:

1.getForEntity(String url, Class responseType, Object ... urlVariables):该方法提供了三个参数, 其中 url 为请求的地址, responseType 为请求响应体body 的包装类型, urlVariables 为 url 中的参数绑定。 

如:其中name={1}中的{1}即用之后的“didi”替代。

getForEntity("http://USER-SERVICE/user?name = {l}", String.class, "didi")

2.getForEntity(String url, Class responseType, Map urlVariables)其中Map urlVariables

RestTemplate restTemplate = new RestTemplate();
Map params = new HashMap<>();
params.put("name", "dada");
ResponseEntity responseEntity = restTemplate.getForEntity("http://USER­-SERVICE/user?name={name}", String.class, params);

3. getForEntity(URl url, Class responseType)

该方法使用 URI 对象来替代之前的 url 和 urlVariables 参数来指定访问地址和参数绑定。 

 

第二种: getForObject 函数。该方法可以理解为对 getForEntity 的进 一 步封装,

它通过 HttpMessageConverterExtractor 对 HTTP 的请求响应体 body 内容进行对象转换, 实现请求直接返回包装好的对象内容。 比如:

RestTemplate restTemplate = new Rest Template() ;
String result = restTemplate.getForObject(uri, String.class);
//    当 body 是 一 个 User 对象时, 可以直接这样实现:
RestTemplate restTemplate = new RestTemplate();
User result = restTemplate.getForObject (uri,\User.class);

同样也存在三种重载

 

POST请求

在 RestTemplate 中, 对 POST 请求时可以通过如下三个方法进行调用实现。第 一 种: postForEntity 函数。 该方法同 GET 请求中的 getForEntity 类似, 会在调用后返回 ResponseEntity 对象, 其中 T 为请求响应的 body 类型。 比如下面这个例子, 使用 postForEntity提交POST 请求到 USER-SERVICE 服务的 /user 接口,提交的 body 内容为 user 对象, 请求响应返回的 body 类型为 String 。

RestTemplate restTemplate = new RestTemplate();
User user = new User("didi", 30);
ResponseEntity responseEntity = restTemplate.postForEntity("http://USER-SERVICE/user", user, String.class);
String body = responseEntity.getBody();

第二种: postForObject函数。 该方法也跟getForObject的类型类似, 它的作用是简化postForEntity的后续处理。 通过直接将请求响应的body内容包装成对象来返回使用, 比如下面的例子:
 

RestTemplate restTemplate = new RestTemplate();
User user = new User("didi", 20);
String postResult = restTemplate.postForObject("http://USER-SERVICE/user", user,String.class);

 

你可能感兴趣的:(spring,cloud)