Spring Boot Controller export an Excel

后端 未结 5 1397
悲&欢浪女
悲&欢浪女 2021-02-06 12:22

I have a java/spring boot application where I want to build an API endpoint that creates and returns a downloadable excel file. Here is my controller endpoint:

@         


        
5条回答
  •  眼角桃花
    2021-02-06 12:39

    Letting controller know is always better what it is going to write using ReponseEntity. At service level just create and play around the objects. @RestController or @Controller doesn't matter here.

    What you are looking forward for in your controller is somewhat like this (sample) -

    @GetMapping(value = "/alluserreportExcel")
    public ResponseEntity excelCustomersReport() throws IOException {
        List users = (List) userService.findAllUsers();
        ByteArrayInputStream in = GenerateExcelReport.usersToExcel(users);
        // return IO ByteArray(in);
        HttpHeaders headers = new HttpHeaders();
        // set filename in header
        headers.add("Content-Disposition", "attachment; filename=users.xlsx");
        return ResponseEntity.ok().headers(headers).body(new InputStreamResource(in));
    }
    

    Generate Excel Class -

    public class GenerateExcelReport {
    
    public static ByteArrayInputStream usersToExcel(List users) throws IOException {
    ...
    ...
    //your list here
    int rowIdx = 1;
            for (AppUser user : users) {
                Row row = sheet.createRow(rowIdx++);
    
                row.createCell(0).setCellValue(user.getId().toString());
                ...
            }
    
      workbook.write(out);
      return new ByteArrayInputStream(out.toByteArray());
    

    and finally, somewhere, in your view -

    Export all users to MS-Excel
    

    For full example, take a peek - here, here and here.

提交回复
热议问题