Трябва да направя заявка към сървър за връзки, които могат да бъдат получени, като дам препратка на сървъра.
Да приемем, че имам 10 препратки и искам да получа обратно 10 връзки наведнъж в arrayList.
Дали по-долу е най-ефективният начин да го направите? Изглежда доста ресурсоемко и отнема приблизително 4672ms за генериране
Разгледах документите за 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