说明:由于近期项目中会调用大量的http接口,打算用RestTemplate,所以总结一下备用。
Get请求: ?
1.getForEntity :需要获取到响应头的情况 返回值:ResponseEntity
2.getForObject :不关心响应头的情况 返回值:String
Post请求:
1.postForEntity key/value MultiValueMap形式传参 返回值:ResponseEntity
2.postForEntity json其实就是直接传实体对象 返回值:ResponseEntity
3.postForObject:postForObject 和 postForEntity 基本一致,就是返回类型不同而已
4.postForLocation:postForLocation 方法的返回值是一个 Uri 对象,因为 POST 请求
一般用来添加数据,有的时候需要将刚刚添加成功的数据的 URL 返回来,此时就可以使用这个方法
Put请求:
1.put key/value的MultiValueMap 或者对象的形式直接传 无返回值
Delete请求:
1.delete 路径中直接传url和参数 或者传url和map
通用方法:exchange()
例如:
HttpHeaders headers = new HttpHeaders();
headers.add("cookie","justdojava");
HttpEntity<MultiValueMap<String,String>> request = new HttpEntity<>(null,headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
除了以上基本用法之外,还会有需要为所有请求设置通用请求头的情况,方法如下:
设置通用请求头:
public class HeaderInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] bytes, ClientHttpRequestExecution execution) throws IOException {
request.getHeaders().set("systemId", "a56bd675-c8ee-4ce2-b5fe-39efb44689b2");
//todo 添加其他需要的请求头
return execution.execute(request, bytes);
}
}
@Configuration
public class CustomerConfiguration {
@Bean
public RestTemplate restTemplate(){
RestTemplate template = new RestTemplate();
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new HeaderInterceptor());
template.setInterceptors(interceptors);
return template;
}
}
总结:就先写这么多了,后面遇到其他问题或者别的情况,在继续补充。
|