版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/s573626822/article/details/81903427
导包:
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
定义注解:
/** * 自动解析前端上传的文件到Java对象注解类. */ @Documented @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface ExcelRequestBody { // Excel需要转换成的类. Class<?> requireClass(); // 前段上传文件的参数名称. String name() default "file"; int titleRows(); int headRows(); boolean hasSeq() default true; // Excel类型.默认03、07格式. ExcelType type() default ExcelType.HSSF; }
定义注解解析器:
import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ImportParams; import com.ahies.system.sso.annotation.ExcelRequestBody; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.util.WebUtils; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; /** * Excel方法参数的解析器. * * 使用@ExcelRequestBody注释的参数,excel文件将在spring mvc绑定参数时被转换成excel vo. * * @author chengyuebin */ @Component public class ExcelArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(ExcelRequestBody.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(servletRequest, MultipartHttpServletRequest.class); ExcelRequestBody annotation = parameter.getParameterAnnotation(ExcelRequestBody.class); if (multipartRequest != null) { List<Object> result = new ArrayList<Object>(); List<MultipartFile> files = multipartRequest.getFiles(annotation.name()); ImportParams params = new ImportParams(); params.setTitleRows(annotation.titleRows()); params.setHeadRows(annotation.headRows()); //params.setSheetNum(9); params.setNeedSave(true); for (MultipartFile file : files) { file.getContentType(); List<?> part = ExcelImportUtil.importExcel(file.getInputStream(), annotation.requireClass(), params); result.addAll(part); } return result; } return null; } }
配置解析器到springMvc
import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.util.List; /** * 添加Excel的参数解析器到Spring MVC. * * @author Hohn */ @Configuration public class ExcelConfigurationSupport extends WebMvcConfigurationSupport { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { ExcelArgumentResolver defaultExcelHandler = new ExcelArgumentResolver(); argumentResolvers.add(defaultExcelHandler); } }