本文为转载文,原文地址请戳这这这里.
在RestTemplate中,发送一个GET请求,具体方法如下:
getForEntity
方法的返回值是一个ResponseEntity
,是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。例子如下:
@RequestMapping("/gethello")
public String getHello() {
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class);
String body = responseEntity.getBody();
HttpStatus statusCode = responseEntity.getStatusCode();
int statusCodeValue = responseEntity.getStatusCodeValue();
HttpHeaders headers = responseEntity.getHeaders();
StringBuffer result = new StringBuffer();
result.append("responseEntity.getBody():").append(body).append("
")
.append("responseEntity.getStatusCode():").append(statusCode).append("
")
.append("responseEntity.getStatusCodeValue():").append(statusCodeValue).append("
")
.append("responseEntity.getHeaders():").append(headers).append("
");
return result.toString();
}
如果需要传递参数,可以用以下两种方式:
@RequestMapping("/sayhello")
public String sayHello() {
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://HELLO-SERVICE/sayhello?name={1}", String.class, "张三");
return responseEntity.getBody();
}
@RequestMapping("/sayhello2")
public String sayHello2() {
Map<String, String> map = new HashMap<>();
map.put("name", "李四");
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://HELLO-SERVICE/sayhello?name={name}", String.class, map);
return responseEntity.getBody();
}
name={name}
这种形式,最后一个参数是一个map,map的key即为前边占位符的名字,map的value为参数值第一个调用地址也可以是一个URI而不是字符串,这个时候我们通过Spring中提供的 UriComponents 来构建URI,参数神马的都包含在URI中了,如下:
@RequestMapping("/sayhello3")
public String sayHello3() {
UriComponents uriComponents = UriComponentsBuilder.fromUriString("http://HELLO-SERVICE/sayhello?name={name}").build().expand("王五").encode();
URI uri = uriComponents.toUri();
ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);
return responseEntity.getBody();
}
getForObject
函数实际上是对getForEntity函数的进一步封装,如果你只关注返回的内容,对其他信息都不关注,此时可以使用getForObject。 相当于getForEntity()
,再getBody()
;
用法和getForEntity
一致,传参位置不同,第二个参数为传给调用方法的参数。
用法和getForObject
一致,传参位置不同,第二个参数为传给调用方法的参数。
postForLocation
也是提交新资源,提交成功之后,返回新资源的URI,postForLocation
的参数和前面两种的参数基本一致,只不过该方法的返回值为Uri,这个只需要服务提供者返回一个Uri即可,该Uri表示新资源的位置。
put
方法的参数和前面介绍的postForEntity
方法的参数基本一致,只是put方法没有返回值而已。
@RequestMapping("/put")
public void put() {
Book book = new Book();
book.setName("红楼梦");
restTemplate.put("http://HELLO-SERVICE/getbook3/{1}", book, 99);
}
book对象
是我要提交的参数99
用来替换前面的占位符{1}
也没有返回值
@RequestMapping("/delete")
public void delete() {
restTemplate.delete("http://HELLO-SERVICE/getbook4/{1}", 100);
}
ResponseEntity<People> responseEntity = restTemplate.postForEntity(uri, People.class);
ResponseEntity<PackScanRecVo> responseEntity = restTemplate.getForEntity(url, PackScanRecVo.class, "传参");
ResponseEntity<PackScanRecVo> responseEntity = restTemplate.postForEntity(url, "传参", PackScanRecVo.class);