easypoi解析前端multipart文件到Java对象注解类

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
    }
}

猜你喜欢

转载自blog.csdn.net/s573626822/article/details/81903427