Мне нужно запросить сервер для ссылок, которые можно получить, предоставив серверу ссылку.Spring RestTemplate - передача пакетов GET-запросов
Допустим, у меня есть 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());
}
EDIT:
На основе предложений, я изменил мой код, но я получаю сообщение об ошибке: "Асинхронное выполнение требующей 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());
}
I посмотрел на справочные документы, но ни один из конструкторов не позволяет мне устанавливать как AsyncListenableTaskExecutor, так и ClientHttpRequestFactory (ClientHttpRequestFactory, который я использовал - CustomClientHttpRequestFactory, только расширяет SimpleClientHttpRequestFactory, чтобы я мог получить перенаправленные ссылки успешно ly: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/AsyncRestTemplate.html#AsyncRestTemplate--
Вы можете использовать 'Iterator' вместо' reference.get (i) '. Вам не нужно вызывать '.toString()' в теле ответа, это уже 'String'. Подумайте об этом на codereview. –
Вам не нужно добавлять 'StringHttpMessageConverter' каждый раз. Один раз достаточно, но учтите, что по умолчанию уже нужно было зарегистрировать. –
Вам также не нужно создавать новую 'RestTemplate' каждую итерацию цикла. Достаточно один раз. –