Spring MVC: скачать Excel с помощью почтового запроса - PullRequest
0 голосов
/ 14 сентября 2018

Я показываю в отчете таблицу. Таблица генерируется из данных ответа. Таблицу можно отсортировать, нажав на заголовок. Таким образом, после сортировки данных, когда я пытаюсь экспортировать данные в Excel, я отправляю данные с помощью запроса Post, который, как я знаю, не является способом сделать это, потому что для загрузки Excel необходимо отправить запрос get. Но есть ли какой-нибудь возможный способ сделать это с помощью запроса Post? Я сделал, прежде чем использовать запрос Get. Возможно ли это сделать?

Вот мой код, использующий почтовый запрос, который не работает. Я использую angularjs в передней части. Пожалуйста, направьте меня в этом вопросе. Буду благодарен.

API:

@RequestMapping(value = "/download-base-report-excel", method = RequestMethod.GET)
public void downloadBaseReportExcel(@RequestBody ReportDTO reportDTO, HttpServletResponse response) throws IOException {
    String fileName = "Excel Report.xls";
    HSSFWorkbook workbook = reportService.downloadBaseReportExcel(reportDTO);
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
    workbook.write(response.getOutputStream());
    response.getOutputStream().close();
}

В AngularJS:

$scope.downloadExcel = function(reportData){
    var reportDTO = reportData;     
    restservice.get( reportDTO, "api/v1/report/download-base-report-excel).then(function(response) {
        if (response != null) {
            console.log(response);
        }
    });
};

В представлении:

<div id="report-chart" class="table-responsive">
    <table class="table table-bordered table-hover table-striped">
        <thead class="bg-teal bg-lighten-5">
            <tr>
                <th ng-repeat="header in reportData.reportColsModels">{{header.name}}</th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="rowModels in reportData.reportRowsModels">
                <td ng-repeat="model in rowModels">{{model.value}}</td>
            </tr>
            <tr ng-show="reportData.reportRowsModels === 0">
                <td colspan="5" class="text-muted">No data found</td>
            </tr>
        </tbody>
    </table>
</div>
<div class="" style="text-align: right">
    <a ng-click="downloadExcel(reportData)" class="btn btn-outline-primary"><i class="fas fa-file-download"></i>Export to Excel</a>
</div>
...