restTemplate的使用
RestOperations接口
此类org.springframework.web.client.RestOperations
是一个接口,定义了许多rest请求的方法
exchange方法
@Override
public <T> ResponseEntity<T> exchange(String url, HttpMethod method,
@Nullable HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables)
throws RestClientException {
//返回一个RequestCallback实现
RequestCallback requestCallback = httpEntityCallback(requestEntity, responseType);
//返回一个ResponseExtractor是用来准备ResponseEntity 。
ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType);
return nonNull(execute(url, method, requestCallback, responseExtractor, uriVariables));
}
HttpMethod
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
HttpHeaders
说白了,就是用来描述请求头的,一个请求头的k,可以相同的时候,value可以不相同
public class HttpHeaders implements MultiValueMap<String, String>, Serializable{}
MultiValueMap
MultiValueMap这种数据类型,一个k可以对应多个value
public interface MultiValueMap<K, V> extends Map<K, List<V>> {}
HttpEntity
public class HttpEntity<T> {
/**
* The empty {@code HttpEntity}, with no body or headers.
*/
public static final HttpEntity<?> EMPTY = new HttpEntity<>();
private final HttpHeaders headers;
@Nullable
private final T body;
}
通用方法
//所有的请求头都可以在这里设置
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type","application/json");
//可以在这里设置请求的参数
HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
//设置url,HttpMethod,请求的参数,以及接受参数的类型
ResponseEntity<String> resEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
上述的这一段代码,可以请求所有的rest接口,非常通用
异常
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.AccessToken] and content type [application/octet-stream]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:123)