使用easyexcel进行Excel导入导出遇到的各种问题汇总

SpringMVC接口定义问题:

@Api("导出")
@RequestMapping("/")
public interface ExcelImportExport {
    @GetMapping("export/inspection_table")
    @ApiOperation(value = "导出点检表")
    //public AMMSResponse exportInspectionTableExcel(@RequestParam List 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

参考Controller报错:java.lang.NoSuchMethodException: 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获取前端数据,参考GetMapping 和 PostMapping的入参注解问题,是无法获取多个DTO的,最多只能获取一个DTO,因此若用要获取多个DTO可以获取DTOid的列表,进而从数据库获取DO,转换为DTO

Instant转换为String时,需要指定时区和位置等信息:

DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
                                .withZone(ZoneId.systemDefault())
                                .withLocale(Locale.CHINA )
                                .format(Instant.now())).toString()

参考:
Format Instant to String
将字符串转换为Instant
JAVA简单快速的读写Excel之EasyExcel
EasyExcel 轻松灵活读取Excel内容
EasyExcel ----- 实现数据库数据 导出为Excel表和Excel表导入数据功能
EasyExcel ----- 实现数据库数据 导出为Excel表和Excel表导入数据功能
使用EasyExcel导入导出Excel

你可能感兴趣的:(spring)