目录
Spring中调用Restful接口
RestTemplate
简介
RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。
RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnection),如果有需要的话也可以通过
setRequestFactory
方法替换为例如 Apache HttpComponents、Netty或OkHttp等其它HTTP library。
使用
public void getLucky() {
//获取request工厂
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
//设置连接超时时间
requestFactory.setConnectTimeout(3000);
//设置读取超时时间
requestFactory.setReadTimeout(5000);
//获取restTemplate
RestTemplate restTemplate = new RestTemplate(requestFactory);
//查询,将结果映射为String
ResponseEntity<String> forEntity = restTemplate.getForEntity("http://127.0.0.1:8080/hello/say", String.class);
String body = forEntity.getBody();
System.out.println(body);
//查询,将结果映射为String
String forObject = restTemplate.getForObject("http://127.0.0.1:8080/hello/say", String.class);
System.out.println(forObject);
}
AsyncRestTemplate
简介
在某些场合下,我们并不需要等待请求的结果,或者我们不关心请求是否执行成功,需要继续执行之后的逻辑,就需要通过异步处理。其中,整个过程是异步非阻塞的,一旦获取到数据就会触发回调函数,进而获取到响应数据,最后再进行业务逻辑相关处理。
使用
public void asyncGetLucky(){
//获取Request工厂
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
//连接超时
requestFactory.setConnectTimeout(3000);
//读超时
requestFactory.setReadTimeout(5000);
//为Request工厂设置任务执行器
requestFactory.setTaskExecutor(new SimpleAsyncTaskExecutor());
//获取异步RestTemplate
AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();
//为异步RestTemplate设置Request工厂
asyncRestTemplate.setAsyncRequestFactory(requestFactory);
//使用get请求获取数据
ListenableFuture<ResponseEntity<String>> forEntity = asyncRestTemplate.getForEntity("http://127.0.0.1:8080/hello/say", String.class);
System.out.println("Strat");
//回调函数
forEntity.addCallback(new SuccessCallback<ResponseEntity<String>>() {
@Override
public void onSuccess(ResponseEntity<String> stringResponseEntity) {
System.out.println("successed");
}
}, new FailureCallback() {
@Override
public void onFailure(Throwable throwable) {
System.out.println("failed");
}
});
System.out.println("end");
}
我们可以看到控制台打印的顺序是Start—–>end—–>successed。
注意
下图是AsyncRestTemplate的getForEntity方法:
下图是RestTemplate的getForEntity方法:
对比我们可以发现两者的方法参数相同,只是返回值不同。其他的方法都和这两种类似,参数相同而返回值不同。
版权声明:本文为cw1254332663原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。