Мне нужно запросить у сервера ссылки, которые можно получить, предоставив серверу ссылку.
Допустим, у меня есть 10 ссылок, и я хочу получить 10 ссылок за один раз в arrayList.
Является ли приведенный ниже наиболее эффективным способом сделать это? Это выглядит довольно ресурсоемким и занимает примерно 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--
Iterator
вместоreferences.get(i)
. Вам не нужно вызывать.toString()
в теле ответа, это ужеString
. Попробуйте задать этот вопрос на codereview. - person Sotirios Delimanolis   schedule 21.07.2015StringHttpMessageConverter
. Одного раза достаточно, хотя обратите внимание, что он уже должен быть зарегистрирован по умолчанию. - person Sotirios Delimanolis   schedule 21.07.2015RestTemplate
каждую итерацию цикла. Один раз достаточно. - person Sotirios Delimanolis   schedule 21.07.2015