使用easyexcel进行Excel导入导出遇到的各种问题汇总
SpringMVC接口定义问题:
@Api("导出")
@RequestMapping("/")
public interface ExcelImportExport {
@GetMapping("export/inspection_table")
@ApiOperation(value = "导出点检表")
//public AMMSResponse exportInspectionTableExcel(@RequestParam List<InspectionTableDTO> inspectionTableDTOList, HttpServletResponse response) throws AMMSException, IOException;
public AMMSResponse exportInspectionTableExcel(@RequestParam List<Long> idList, HttpServletResponse response) throws AMMSException, IOException;
}
注意这里定义时没写@RequestParam会报错:
java.lang.NoSuchMethodException: java.util.List.<init>() 以及 No primary or default constructor found for interface java.util.List
参考 报错原因: 对象在初始化时没有找到对应的构造方法,从而导致对象初始化失败。
解决方法: 提供相应的构造方法即可,如示例接口,有两种处理方法。 方法一,参数前加@RequestParam:
@GetMapping("sample")
public void sample(@RequestParam List<Integer> ids){
...
}
方法二,参数封装到对象中:
@GetMapping("sample")
public void sample(Sample sample){
List<Integer> ids = sample.getIds();
...
}
private static class Sample{
private List<Integer> ids;
...
// getter setter...
}
导出excel时,使用GetMapping获取前端数据,参考,是无法获取多个DTO的,最多只能获取一个DTO,因此若用要获取多个DTO可以获取DTO的id的列表,进而从数据库获取DO,转换为DTO。
Instant转换为String时,需要指定时区和位置等信息:
DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
.withZone(ZoneId.systemDefault())
.withLocale(Locale.CHINA )
.format(Instant.now())).toString()
参考:
