Spring中访问Restful接口

  • Post author:
  • Post category:其他



目录


Spring中调用Restful接口


RestTemplate


简介


使用


AsyncRestTemplate


简介


使用


注意


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 版权协议,转载请附上原文出处链接和本声明。