У меня есть следующий ресурс Rest, который загружает файл из базы данных. Он отлично работает в браузере, однако, когда я пытаюсь сделать это с Java-клиента, как показано ниже, я получаю 406 (ошибка не принимается).Как программно использовать файл из Rest API с помощью Spring?
...
@RequestMapping(value="/download/{name}", method=RequestMethod.GET,
produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public @ResponseBody HttpEntity<byte[]> downloadActivityJar(@PathVariable String name) throws IOException
{
logger.info("downloading : " + name + " ... ");
byte[] file = IOUtils.toByteArray(artifactRepository.downloadJar(name));
HttpHeaders header = new HttpHeaders();
header.set("Content-Disposition", "attachment; filename="+ name + ".jar");
header.setContentLength(file.length);
return new HttpEntity<byte[]>(file, header);
}
...
клиент развернут на том же сервере, с другой порт (сообщение дает правильное название):
...
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/activities/download/" + message.getActivity().getName();
File jar = restTemplate.getForObject(url, File.class);
logger.info("File size: " + jar.length() + " Name: " + jar.getName());
...
Что я здесь отсутствует?
Могут ли эти файлы быть большими? Я бы предложил потоковое воспроизведение вместо загрузки всех байтов в массив и отправки его обратно –
@TritonMan Размер файла составляет около 90 КБ, поэтому он не такой большой. – Sami
Не уверен, что это полезно или нет, но моя команда только начала использовать модификацию для наших остальных вызовов. В основном вы определяете аннотированный интерфейс, тогда вы можете делать вызовы отдыха так же, как вы вызываете какой-либо другой метод. «Дооснащение» обрабатывает все детали в фоновом режиме: http://square.github.io/retrofit/ – StormeHawke