Spring RestTemplate - 传递批量的GET请求

时间:2015-07-21 19:46:34

标签: java spring resttemplate

我需要向服务器查询可以通过向服务器提供引用来获取的链接。

假设我有10个引用,我希望在arrayList中一次性获得10个链接。

以下是最有效的方法吗?它看起来非常耗费资源,需要大约4672毫秒来生成

我查看了RestTemplate的文档:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#getForEntity-java.lang.String-java.lang.Class-java.util.Map-但似乎没有更简单的方法来做我想做的事。

ArrayList<String> references = new ArrayList<>();
ArrayList<String> links = new ArrayList<>();
RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
for (int i = 0; i < 10; i++) {
    ResponseEntity<String> resource = restTemplate.getForEntity(references.get(i), String.class);
    links.add(resource.getBody().toString());
}

编辑:

基于建议,我已将代码更改为但我收到错误:“异步执行需要设置AsyncTaskExecutor”:

ArrayList<String> references = new ArrayList<>();
ArrayList<String> links = new ArrayList<>();
AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate(new CustomClientHttpRequestFactory()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
for (int i = 0; i < 10; i++) {
    Future<ResponseEntity<String>> resource = asyncRestTemplate.getForEntity(references.get(i), String.class);
    ResponseEntity<String> entity = resource.get(); //this should start up 10 threads to get the links asynchronously
    links.add(entity.getBody().toString());
}

我查看了参考文档,但是没有一个构造函数允许我设置AsyncListenableTaskExecutor和ClientHttpRequestFactory(我使用的ClientHttpRequestFactory - CustomClientHttpRequestFactory只是扩展SimpleClientHttpRequestFactory,以便我可以成功获得重定向链接:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/AsyncRestTemplate.html#AsyncRestTemplate-- < / p>

1 个答案:

答案 0 :(得分:2)

在这里,您按顺序进行REST调用 - 即没有任何内容并行完成。

您可以使用the asynchronous variant of RestTemplate并同时进行这些调用。