RestTemplate的基本使用

getForObject  和 getForEntity  的区别

getForObject函数实际上是对getForEntity函数的进一步封装,如果你只关注返回的消息体的内容,对其他信息都不关注,此时可以使用getForObject。

ResponseEntity<T>是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。如果需要提取其中的部分属性的话直接从ResponseEntity中调用相应的方法即可。(具体方法见下图)

 

 

 

注意:使用restTemplate发送请求的时候,url地址的开头必须是http:// .......    一定不能是 https:// ...........       

 

1、RestTemplate发送get请求携带HttpHeaders信息、参数

1 HttpHeaders httpHeaders= new HttpHeaders();
2 httpHeaders.add("Host", "XXXX.XXXX.XXXX.XX");
3 //这里如果需要传递参数的话,将参数封装在map集合中,写到下面式子中null的位置处
4 HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);//这里将头信息封装进HttpEntity中,发送请求时用exchange代替getForObject()方法
5 ResponseEntity<String> resEntity = restTemplate.exchange(url.toString(), HttpMethod.GET, requestEntity, String.class);

 

2、RestTemplate发送get请求携带参数(直接将具体的参数传递过去)

  方法一:(当String类型的url地址中有参数的位置,可以理解为占位符)

  

1 RestTemplate restTemplate = new RestTemplate();
2 ResponseEntity<String> res = restTemplate.getForEntity("http://localhost:8080/user/{id}", String.class, "1");

 

  方法二:(将参数封装到map集合中传递)

Map<String, Object> map = new HashMap<String, Object>();
map.put("id", 11);
ResponseEntity<String> res = restTemplate.getForEntity(
"http://localhost::8080/user/{id}", String.class, map);
String body = res.getBody();//返回的ResponseEntity中包含了头信息,body信息,状态码等信息。

 

3、RestTemplate发送get请求---不携带任何参数

1 RestTemplate restTemplate = new RestTemplate();
2 ResponseEntity<String> res = restTemplate.getForEntity("http://localhost:8080/user/{id}", String.class);

 

 

4、RestTemplate发送Post请求----没有参数,没有HttpHeaders信息

  • 方法的第一参数表示要调用的服务的地址
  • 方法的第二个参数表示上传的参数
  • 方法的第三个参数表示返回的消息体的数据类型
@RequestMapping("/book3")
public Book book3() {
    Book book = new Book();
    book.setName("红楼梦");
    ResponseEntity<Book> responseEntity = restTemplate.postForEntity("http://HELLO-SERVICE/getbook2", book, Book.class);
    return responseEntity.getBody();
}

 

5、如果你只关注,返回的消息体,可以直接使用postForObject。用法和getForEntity一致。

6、使用RestTemplate发送Post请求----携带HttpHeaders信息,携带参数。

HttpHeaders httpHeaders= new HttpHeaders();
httpHeaders.add("Host", "XXXX.XXXX.XXXX.XX");
Map param = new HashMap();
param.put("username","lisi");
HttpEntity<HashMap> requestEntity = new HttpEntity<HashMap>(map, httpHeaders);
String result
= restTemplate.postForObject(url, requestEntity, String.class);

 

posted @ 2019-10-08 22:40  Shawn_Michaels  阅读(5058)  评论(0编辑  收藏  举报