EasyExcel 学习笔记 - 自定义注解导入 Excel

Posted 笑虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyExcel 学习笔记 - 自定义注解导入 Excel相关的知识,希望对你有一定的参考价值。

EasyExcel 学习笔记 - 自定义注解导入 Excel

pome.xml 依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.8</version>
        </dependency>

诗词表(Poem)实体类

@Data
public class Poem 
    private Integer id;
    private String title;
    private String content;
    private String author;
    private Date publishedTime;
    private Date updateTime;
    private Date createTime;

ImportExcel 导入注解

@Target(ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER)
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface ImportExcel 
    String value() default "file";

Controller 的参数添加 ImportExcel 注解

@RestController
public class ImportExcelController 
    @PostMapping("/update")
    public List<Poem> listObj(@ImportExcel List<Poem> list) 
        return list;
    

自定义 Controller 参数处理器

判断当前参数上如果有 ImportExcel 注解。就处理

import cn.hutool.core.util.TypeUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.event.SyncReadListener;
import com.jerry.springbooteasyexceldemo.annotation.ImportExcel;
import lombok.extern.slf4j.Slf4j;
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.MultipartRequest;

@Slf4j
@Component
public class ImportExcelArgumentResolver implements HandlerMethodArgumentResolver 
    /**
     * 如果存在指定注解进入 resolveArgument
     * @param param 当前参数
     * @return
     */
    @Override
    public boolean supportsParameter(MethodParameter param) 
        return param.hasParameterAnnotation(ImportExcel.class);
    
    /**
     * 解析并处理当前参数
     * @param parameter     当前参数对象
     * @param mavContainer
     * @param webRequest
     * @param binderFactory
     * @return
     */
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory)
    
        try 
            MultipartRequest nativeRequest = webRequest.getNativeRequest(MultipartRequest.class);
            // 取注解
            ImportExcel importExcel = parameter.getParameterAnnotation(ImportExcel.class);
            // 取上传的文件
            MultipartFile file = nativeRequest.getFile(importExcel.value());
            // 取出导入参数的类型
            Class<?> clazz = TypeUtil.getClass(TypeUtil.getTypeArgument(parameter.getGenericParameterType()));
            // 同步读 excel 文件,返回 List
            return EasyExcel.read(file.getInputStream(), clazz, new SyncReadListener()).sheet().doReadSync();
         catch (Exception e) 
            log.error(e.getMessage());
            return null;
        
    

注册处理器

@Configuration
public class WebConfig implements WebMvcConfigurer 

    @Autowired
    ImportExcelArgumentResolver importExcelArgumentResolver;

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) 
        argumentResolvers.add(importExcelArgumentResolver);
    

curl 请求测试

curl --location --request POST 'http://127.0.0.1/update' \\
--header 'User-Agent: jerry' \\
--form 'file=@"E:\\\\poem.xlsx"'

参考资料

cn.hutool.core.util.TypeUtil
Easy Excel - 读Excel
SpringBoot 项目优雅实现 Excel 导入导出功能

以上是关于EasyExcel 学习笔记 - 自定义注解导入 Excel的主要内容,如果未能解决你的问题,请参考以下文章

easyexcel导出excel金额分转元

poi和easyExcel基于Java操作Excel学习笔记

EasyExcel 学习笔记 - 读Excel

EasyExcel 学习笔记 - 读Excel

easyexcel导入对象与表头不一致时

学习笔记Spring中自定义注解