小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
RestTemplate Get请求
在RestTemplate中,对GET请求可以通过如下两种方法进行调用实现
第一种:getForEntity方法
返回ResponseEntity,对象是Spring对HTTP请求响应的封装,其中主要存储了HTTP的请求状态码、在它的父类HttpEntity中还存储着HTTP请求的头信息对象HttpHeaders以及泛型类型的请求体对象。
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... urlVariables) throws RestClientException {
RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
return (ResponseEntity)this.execute(url, HttpMethod.GET, requestCallback, responseExtractor, urlVariables);
}
三个参数,url为请求的地址,responseType为请求响应体body的包装类型,urlVariables为url中的参数绑定。
实例:
restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={1}", String.class, "didi")
responseType
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> urlVariables)
throws RestClientException {
RequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
return execute(url, HttpMethod.GET, requestCallback, responseExtractor, urlVariables);
}
三个参数,url为请求的地址,responseType为请求响应体body的包装类型,urlVariables使用了Map类型
示例:
Map<String, String> params = new HashMap<>();
params.put("name", "dada");
restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={name}", String.class, params);
public <T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType) throws RestClientException {
RequestCallback requestCallback = acceptHeaderRequestCallback(responseType);
ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
return execute(url, HttpMethod.GET, requestCallback, responseExtractor);
}
使用URI对象替代之前url和urlVariables指定访问地址和参数绑定。
UriComponents uriComponents = UriComponentsBuilder.fromUriString(
"http://HELLO-SERVICE/hello1?name={name}")
.build()
.expand("dodo")
.encode();
URI uri = uriComponents.toUri();
restTemplate.getForEntity(uri, String.class).getBody();
第二种:getForObject方法
对getForEntity的进一步封装,通过HttpMessageConverterExtractor对HTTP的请求响应体body内容进行对象转换,实现请求直接返回包装好的对象内容
当不需要关注请求响应除body之外的内容时,该方法非常好用,可以少一个从Response中获取body的步骤。