<!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-web -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
我的spring boot添加好依赖以后完整的pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.xqlee.project.demo</groupId>
<artifactId>demo-springboot-easypoi-excel</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-springboot-easypoi-excel</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-web -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package net.xqlee.project.demo.pojo;
import java.util.Date;
import javax.validation.constraints.Max;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.NotBlank;
import cn.afterturn.easypoi.excel.annotation.Excel;
public class User {
@Excel(name = "id")
@NotBlank(message = "该字段不能为空")
private String id;
@Excel(name = "姓名")
@Pattern(regexp = "[\\u4E00-\\u9FA5]{2,5}", message = "姓名中文2-5位")
private String name;
@Max(value=20)
@Excel(name = "年龄")
private Integer age;
@Excel(name = "生日", importFormat = "yyyy-MM-dd")
private Date birthday;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
或许你已经发现,在创建的pojo的属性上我添加了一些注解。其中excel的注解是用于与excel文件做映射使用的。另外的一部分是验证使用。通过上面的依赖导入我们可以看项目的maven实际导入的包中含有hibernate的验证框架。package net.xqlee.project.demo.handler;
import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHanlderResult;
import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl;
import net.xqlee.project.demo.pojo.User;
/***
* 自定义验证
*/
public class UserExcelHandler implements IExcelVerifyHandler<User> {
private static final Logger log = LoggerFactory.getLogger(UserExcelHandler.class);
/***
* 自定义验证实现
* @param user
* @return
*/
@Override
public ExcelVerifyHanlderResult verifyHandler(User user) {
ExcelVerifyHanlderResult result=new ExcelVerifyHanlderResult(true);//默认设置验证通过为true
//TODO================可以根据对象字段进行各种验证=================
//例如:(注意正则验证在字段注解无效,也可以通过该方式来验证)
if (user.getAge()<0){
result.setSuccess(false);//错误标记,该数据会放在导入的返回集合 getFailList()中
result.setMsg("年纪错误");
return result;
}
return result;
}
}
package net.xqlee.project.demo.controller;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
import net.xqlee.project.demo.handler.UserExcelHandler;
import net.xqlee.project.demo.pojo.User;
@RestController
public class ExcelImportController {
private static final Logger log = LoggerFactory.getLogger(ExcelImportController.class);
@PostMapping("excelImport.do")
public void excelImport(@RequestParam("file") MultipartFile file) {
ImportParams importParams = new ImportParams();
// 数据处理
UserExcelHandler handler = new UserExcelHandler();
importParams.setVerifyHanlder(handler);
// 需要验证
importParams.setNeedVerfiy(true);
try {
ExcelImportResult<User> result = ExcelImportUtil.importExcelMore(file.getInputStream(), User.class,
importParams);
List<User> successList = result.getList();
List<User> failList = result.getFailList();
log.info("是否存在验证未通过的数据:" + result.isVerfiyFail());
log.info("验证通过的数量:" + successList.size());
log.info("验证未通过的数量:" + failList.size());
for (User user : successList) {
log.info("成功列表信息:ID=" + user.getId() + user.getName() + "-"
+ new SimpleDateFormat("yyyy-MM-dd").format(user.getBirthday()));
}
for (User user : failList) {
log.info("失败列表信息:" + user.getName());
}
} catch (IOException e) {
log.error(e.getMessage(), e);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
在postmain中输入接口的地址并选择提交方式。将上传的文件以form-data的方式设置,具体如下图:提示:工具下载,访问密码 9987
Postman官方版.exe
提示:项目源码下载
首选下载:demo-springboot-easypoi-excel.zip 访问密码9987
http://blog.xqlee.com/article/326.html