Отправить файлы Excel с микро на микро - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь установить связь между двумя микро, где первый получает петицию от внешнего интерфейса и связывается с другим микро, который создает файл Excel и отправляет его обратно на первый микро, начиная загрузку файла .

Сначала я попытался напечатать простой ответ String, чтобы проверить связь между микроэлементами, и это работало правильно, но то же самое для файлов не сработало.

Вот код, которому я следую: Для контроллера A:


    @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 с localhost. Есть ли способ сделать это? Спасибо всем.

1 Ответ

0 голосов
/ 28 мая 2019

Я обнаружил проблему.Файл Excel представляет собой файл октетного потока, поэтому его необходимо получить в виде массива byte [].Это контроллер A:

    @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;
}

и контроллер B:

@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();    

}

Это прекрасно работает для меня, надеюсь, кто-то найдет информацию полезной.

...