Я пытаюсь создать API, который отправляет InputStreamResource из файла Excel. который создается на стороне сервера из данных таблицы.
, когда я нажимаю на этот API от почтальона, файл Excel не открывается и говорит, что не имеет правильного расширения или файл поврежден.
Я сохранил файл на стороне сервера, который открывается нормально.
также попытался отправить HTTP ENTITY. все еще получил тот же ответ
Это мой контроллер
@GetMapping(path = RestMappingConstants.AdminRequestUri.DOWNLOAD_A2TO_INTERVIEWER_EXCEL)
public ResponseEntity<InputStreamResource> downloadA2ToInterviewPaymentExcel( ) throws IOException{
ByteArrayInputStream in = a2AdminService.downloadA2ToInterviewPaymentExcel();
HttpHeaders headers = new HttpHeaders();
//InputStream res=A2AdminController.class.getClassLoader().getResourceAsStream("payment.xlsx");
headers.add("Content-Disposition", "attachment; filename=PaymentDetails.xlsx");
headers.setContentType(new MediaType("application", "vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
return ResponseEntity
.ok()
.headers(headers)
.body(new InputStreamResource(in));
}
Это мой класс обслуживания
@Override
public ByteArrayInputStream downloadA2ToInterviewPaymentExcel() throws IOException {
List<A2ToInterviewerPaymentEntity> a2ToInterviewerPaymentEntityList = a2AdminDao.getApprovedPaymentList();
// FileOutputStream file=new FileOutputStream("payment.xlsx");
// convert to excel
String[] columns = { "Id", "Amount", "PaymentMode", "PaymentType", "TransactionId", "InterviewScheduleId",
"EmployerToPaymentEntityId", "PaymentStatus" };
try (Workbook workbook = new XSSFWorkbook(); ByteArrayOutputStream out = new ByteArrayOutputStream();) {
Sheet sheet = workbook.createSheet("payment");
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerFont.setColor(IndexedColors.BLUE.getIndex());
CellStyle headerCellStyle = workbook.createCellStyle();
headerCellStyle.setFont(headerFont);
// Row for Header
Row headerRow = sheet.createRow(0);
// Header
for (int col = 0; col < columns.length; col++) {
Cell cell = headerRow.createCell(col);
cell.setCellValue(columns[col]);
cell.setCellStyle(headerCellStyle);
}
int rowIdx = 1;
for (A2ToInterviewerPaymentEntity paymentEntity : a2ToInterviewerPaymentEntityList) {
Row row = sheet.createRow(rowIdx++);
row.createCell(0).setCellValue(paymentEntity.getId());
row.createCell(1).setCellValue(paymentEntity.getAmount());
row.createCell(2).setCellValue("UPI");
row.createCell(3).setCellValue("TRANSFER");
row.createCell(4).setCellValue(paymentEntity.getTransactionId());
row.createCell(5).setCellValue(paymentEntity.getInterviewSchedule().getId());
row.createCell(6).setCellValue(paymentEntity.getEmployerToA2PaymentEntity().getId());
row.createCell(7).setCellValue(paymentEntity.getPaymentStatus().toString());
}
workbook.write(out);
// workbook.write(file);
byte[] arr = out.toByteArray();out.flush();out.close();
return new ByteArrayInputStream(arr);
}
}