RestTemplate :
该对象会使用 Ribbon 的自动化配置, 同时通过配置 @LoadBalanced 还能够开启客户端负载均衡
GET请求
第一 种:getForEntity 函数。该方法返回的是 ResponseEntity该对象是 Spring对 HTTP 请求响应的封装
下面的例子,
就是访问 USER-SERVER 服务的 /user 请求, 同时最后一 个参数didi 会替换 url 中的{ 1} 占位符, 而返回的 ResponseEntity 对象中的 body 内容类型会根据第二个参数转换为 String 类型。
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.getForEntity
("http://USER-SERVICE/user?name = {1} ", String. class, "didi");
String body = responseEntity.getBody () ;
若我们希望返回的 body 是一 个User 对象类型
ResponseEntity<User> 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<String, String> params = new HashMap<>();
params.put("name", "dada");
ResponseEntity<String> 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> 对象, 其中 T 为请求响应的 body 类型。 比如下面这个例子, 使用 postForEntity提交POST 请求到 USER-SERVICE 服务的 /user 接口,提交的 body 内容为 user 对象, 请求响应返回的 body 类型为 String 。
RestTemplate restTemplate = new RestTemplate();
User user = new User("didi", 30);
ResponseEntity<String> 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);