Пытаюсь наладить связь между двумя микро, где первый получает петицию от фронтенда и связывается с другим микро, который создает файл excel и отправляет его обратно в первый микро, начиная загрузку файла.
Во-первых, я попытался напечатать простой ответ String, чтобы проверить связь между микроконтроллерами, и это сработало правильно, но то же самое для файлов не сработало.
Вот код, которому я следую: Для контроллера А:
@GetMapping(path = "/test")
public void getEntities2(HttpServletRequest request, HttpServletResponse response) throws IOException {
ResponseEntity<Workbook> responseEntity = new RestTemplate()
.getForEntity("http://localhost:8080/proceso/excel", Workbook.class);
assertThat(responseEntity.getStatusCode(), equalTo(HttpStatus.OK));
response.setHeader("Content-disposition", "attachment; filename = " + "test.xls");
Workbook workbook = responseEntity.getBody();
workbook.write(response.getOutputStream());
workbook.close();
}
Второй контроллер (генератор файлов Excel):
@GetMapping(path = "/excel")
public ResponseEntity<Workbook> test3(HttpServletResponse response) throws Exception {
HashMap<String, ArrayList<String>> test = new HashMap<String, ArrayList<String>>();
Workbook workbook = CreateExcel.excelCreator(test);
Workbook responseFile = workbook;
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename = " + "test.xls")
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(responseFile);
}
И тогда появляется следующая ошибка:
org.springframework.web.client.HttpClientErrorException$NotAcceptable: 406 null
Я просто хочу получить файл в первом контроллере и загрузить Excel с локального хоста. Есть ли способ сделать это? Спасибо всем.


Я обнаружил проблему. Файл excel представляет собой файл потока октетов, поэтому его необходимо получить в виде массива byte[]. Это контроллер А:
@GetMapping(path = "/")
public ResponseEntity<byte[]> getEntities() throws IOException {
ResponseEntity<byte[]> responseEntity = new RestTemplate()
.getForEntity("http://localhost:8080/excel", byte[].class);
assertThat(responseEntity.getStatusCode(), equalTo(HttpStatus.OK));
return responseEntity;
}
И контроллер Б:
@GetMapping(path = "/excel")
public void getExcel(HttpServletResponse response) throws Exception {
Iterable<InstancesAggregate> list = instancesAggregate.myfindAll(); //Creating a list
HashMap<String, ArrayList<String>> test = CreateExcel.setExcelProceso(list);
Workbook workbook = CreateExcel.excelCreator(test);
response.setHeader("Content-disposition", "attachment; filename = " + "test.xls");
workbook.write(response.getOutputStream());
workbook.close();
}
Это отлично работает для меня, надеюсь, что кто-то найдет информацию полезной.