天天看點

Spring + myBatis +Excel-boot導出檔案

配置檔案pom.xml引入

<dependency>
            <groupId>io.github.magic-core</groupId>
            <artifactId>excel-boot</artifactId>
            <version>2.0</version>
        </dependency>

           

最先定義的參數

/***
 * 姓名
 */
@ExportField(columnName = "姓名")
private String name;

/***
 * 電話
 */
@ExportField(columnName = "電話")
private String mobile;
           

controller中傳回值是void

@ApiOperation("導出")
    @PostMapping(value = "/exportExcel", produces = "application/json")
    public void exportExcel(@RequestParam String ids,HttpServletResponse httpServletResponse) {
        registerService.exportExcel(ids,httpServletResponse);
    }

           

//service直接按照官方自己改改就行了很順利

@Override
    public void exportExcel(String ids,HttpServletResponse httpServletResponse){
        try {
            ExcelBoot.ExportBuilder(httpServletResponse, "Register", RegisterExcel.class).
                    exportResponse(null, new ExportFunction<RegisterExcel, RegisterExcel>() {
                        @Override
                        public List<RegisterExcel> pageQuery(RegisterExcel registerExcel, int pageNum, int pageSize) {

                            String[] split = ids.split(",");
                            ArrayList<Integer> list = new ArrayList<>();
                            for (String sp : split) {
                                int i = Integer.parseInt(sp);
                                list.add(i);
                            }
                            System.out.println("-----------"+list);
                            List<RegisterExcel> registerExcelList = registerMapper.findRegisterListByIds(list);
                            System.out.println("+++++++"+registerExcelList);
                            return registerExcelList;
                        }

                        @Override
                        public RegisterExcel convert(RegisterExcel registerExcel) {
                            return registerExcel;
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
           

然後就完成了,全部很順利,但是導出的檔案一打開就是檔案損壞,然後開始debug開始找問題,找了一下午導入代碼、資料、參數的問題,然并卵

最後最後一不小心點想到是不是别的問題,然後找到了。。。

// Swagger 中的produces真是坑了半天
//最開始 produces = "application/json" 然後改成了下面的請求頭
@PostMapping(value = "/exportExcel", produces="application/octet-stream")
           

嗯,下載下傳完美打開。。。