1. <!-- JSR 303 规范验证包 -->
  2. <dependency>
  3. <groupId>org.hibernate</groupId>
  4. <artifactId>hibernate-validator</artifactId>
  5. <version>5.2.4.Final</version>
  6. </dependency>

  

  1. @Entity
  2. @Table(name = "employee")
  3. public class Employee extends BaseDomain {
  4. @Excel(name = "名字")
  5. @NotNull(message = "用户名不能空")
  6. private String username;
  7. private String password;
  8. @Excel(name = "年龄")
  9. @Max(value = 100)
  10. @Min(value = 18)
  11. private Integer age;
  12. @Excel(name = "邮箱",width = 20)
  13. @NotNull
  14. private String email;
  15. ...
  16. }
  • 实现IExcelVerifyHandler
  • 把这个类交给Spring管理(千万不要忘了让Spring去扫描到它)
    1. /**
    2. * 自定义验证(我们会在这里做唯一性的验证)
    3. */
    4. @Component
    5. public class EmployeeExcelVerifyHandler implements IExcelVerifyHandler<Employee> {
    6. @Autowired
    7. private IEmployeeService employeeService;
    8. /**
    9. *
    10. * ExcelVerifyHandlerResult
    11. * suceess :代表验证成功还是失败(如果用户名重复,就代表失败)
    12. * msg:失败的原因
    13. */
    14. @Override
    15. public ExcelVerifyHandlerResult verifyHandler(Employee employee) {
    16. ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult(true);
    17. //如果根据用户名获取到用户,代表这个用户已经存在
    18. Employee tempEmp = employeeService.findByUsername(employee.getUsername());
    19. if(tempEmp!=null){
    20. result.setSuccess(false);
    21. result.setMsg("用户名重复");
    22. }
    23. return result;
    24. }
    25. }
    1. @Controller
    2. @RequestMapping("/import")
    3. public class ImportController extends BaseController {
    4.  
    5. @Autowired
    6. private IEmployeeService employeeService;
    7. @Autowired
    8. private IDepartmentService departmentService;
    9. @Autowired
    10. private EmployeeExcelVerifyHandler employeeExcelVerifyHandler;
    11.  
    12. @RequestMapping("/index")
    13. public String index(){
    14. return "import";
    15. }
    16.  
    17.  
    18. @RequestMapping("/employeeXlsx")
    19. public String employeeXlsx(MultipartFile empFile, HttpServletResponse response) throws Exception {
    20. //一.使用EasyPoi获取文件数据
    21. ImportParams params = new ImportParams();
    22. params.setHeadRows(1);
    23. params.setNeedVerfiy(true); //设置验证支持
    24. params.setVerifyHandler(employeeExcelVerifyHandler); //设置一个验证处理器
    25.  
    26. //二.获取excel中的数据,封装成了一个结果对象(有很多东西)
    27. ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(
    28. empFile.getInputStream(),
    29. Employee.class, params);
    30. //三.获到正确的数据,并把它们保存到数据库
    31. List<Employee> list = result.getList();
    32. list.forEach(e->{
    33. e.setPassword("123");
    34. Department dept = departmentService.findByName(e.getDepartment().getName());
    35. e.setDepartment(dept);
    36. employeeService.save(e);
    37. });
    38. //四.如果有错误,把错误数据返回到前台(让前台下载一个错误的excel)
    39. //4.1判断是否有错误
    40. if(result.isVerfiyFail()){
    41. //4.2拿到错误的文件薄
    42. Workbook failWorkbook = result.getFailWorkbook();
    43.  
    44. //把这个文件导出
    45. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime类型
    46. response.setHeader("Content-disposition", "attachment;filename=error.xlsx"); //告诉浏览下载的是一个附件,名字叫做error.xlsx
    47. response.setHeader("Pragma", "No-cache");//设置不要缓存
    48. OutputStream ouputStream = response.getOutputStream();
    49. failWorkbook.write(ouputStream);
    50. ouputStream.flush();
    51. ouputStream.close();
    52. }
    53.  
    54. return "import";
    55. }
    56.  
    57.  
    58. }

      

版权声明:本文为bigbigxiao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bigbigxiao/p/11897871.html