SpringMVC提供 RestTemplate请求http接口,RestTemplate的底层可以使用第三方的http客户端工具实现http 的 请求,,常用的http客户端工具有Apache HttpClient、OkHttpClient等。
在SpringBoot启动类中配置 RestTemplate
@Bean
@LoadBalanced//开启负载均衡
public RestTemplate restTemplate() {
//使用OkHttpClient完成http请求(性能比较出众)
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
本文RestTemplate的常用方法如下图:
GET请求
1.getForEntity
返回的是ResponseEntity。
源码
public <T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType) throws RestClientException {
RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
return (ResponseEntity)nonNull(this.execute(url, HttpMethod.GET, requestCallback, responseExtractor));
}
请求url和返回类型
@Test
public void testRestTemplate(){
ResponseEntity<Map> forEntity = restTemplate.getForEntity("http://localhost:31001/cms/config/getmodel/5a791725dd573c3574ee333f", Map.class);
Map body = forEntity.getBody();
System.out.println(body);
}
2.getForObject
源码
@Nullable
public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException {
RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
return this.execute(url, HttpMethod.GET, requestCallback, responseExtractor);
}
getForObject函数实际上是对getForEntity函数的进一步封装,返回的消息体的内容,返回HttpEntity的body。
POST请求
-
postForEntity
-
postForObject
-
postForLocation
@Nullable public URI postForLocation(URI url, @Nullable Object request) throws RestClientException { RequestCallback requestCallback = this.httpEntityCallback(request); HttpHeaders headers = (HttpHeaders)this.execute(url, HttpMethod.POST, requestCallback, this.headersExtractor()); return headers != null ? headers.getLocation() : null; }
@Nullable
public URI getLocation() {
String value = this.getFirst("Location");
return value != null ? URI.create(value) : null;
}
通过上面的源码可以看出postForLocation返回的是新资源的URI。
PUT请求
put
无返回值
DELETE请求
delete
无返回值