EasyExcel 学习笔记 - 自定义注解导入 Excel
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyExcel 学习笔记 - 自定义注解导入 Excel相关的知识,希望对你有一定的参考价值。
EasyExcel 学习笔记 - 自定义注解导入 Excel
- pome.xml 依赖
- 诗词表(Poem)实体类
- ImportExcel 导入注解
- Controller 的参数添加 ImportExcel 注解
- 自定义 Controller 参数处理器
- 注册处理器
- curl 请求测试
- 参考资料
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的主要内容,如果未能解决你的问题,请参考以下文章