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
参考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
可以获取DTO
的id
的列表,进而从数据库获取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