使用自定义注解加反射抽取导出execl公共类

本文介绍了一种使用自定义注解结合反射技术来抽取导出Excel的公共类的方法。通过这种方式,可以将重复的Excel导出代码进行抽象,提高代码的复用性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用自定义注解加反射抽取导出execl公共类
前两天要做一个导出execl的功能,当然使用poi导出execl网上有许多公共类,我这里也是借用别人的帮助类,不过我现在要说的是使用帮助类之前的那部分操作。
实现的业务场景:页面数据需要导出到execl表中,如下:
 
再如下:

 


 

而这三个页面都需要导出到execl表中,然而导出的代码是非常相似的。先来看看导出的写法,上代码:


 
就是说需要单独设置表头,并且填充数据。但是这些步骤都是重复的,所以我就在想有没有可能做到,自动设置表头和填充数据,这样做的难点就是在于表头如何设置,每个execl的表头是不一样的。
那么我就说说我的做法,设置表头,我想有没有可能给个实体类就可以知道设置那些表头,表头的文字怎么写,然后我就想表头的文字可以通过注释上的文字表示,然后我想到了注解和反射。
1.我的代码需要自定义一个注解:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * <p>ExportExcelAnnotaion</p>
 * 
 * <p>描述:</p>
 *
 * <p>备注:</p>
 * 
 * <p>2016年11月18日 上午10:39:26</p>
 *
 * @author wang.changjiu
 * 
 * @version 1.0.0
 * 
 */


@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExportExcelAnnotaion {


String fieldAnnotate();

}
该注解的目的有两个:
(1) 使用该注解表示的字段是需要导出到execl表中的列数据
(2) 使用该注解可以取到设置表头上的文字。


2.然后,在实体类上需要添加注解:
 
可以看到注解上fieldAnnotate = “颁发媒体”。。。这些文字是需要设置到表头上的。
3.抽取一个baseController
package com.df.ecoland.bm.controller;


import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import javax.servlet.http.HttpServletResponse;


import com.df.ecoland.bm.domain.AwardsDeclare;
import com.df.ecoland.oc.domain.cust.CustOcPartner;
import com.df.framework.annotation.ExportExcelAnnotaion;
import com.df.framework.base.controller.BaseController;
import com.df.framework.excel.HSSFExcel;
import com.df.framework.util.ExcelHelper;


/**
 * <p>BmExportBaseController</p>
 * 
 * <p>描述:</p>
 *
 * <p>备注:</p>
 * 
 * <p>2016年11月18日 上午11:24:46</p>
 *
 * @author wang.changjiu
 * 
 * @version 1.0.0
 * 
 */


public class BmExportBaseController<T> extends BaseController{


public T getEntity(T t) {
Field[] fields = t.getClass().getDeclaredFields();
if(fields!=null) {
for (Field field : fields) {
if(!field.isAccessible()) {
field.setAccessible(true);
}

Export
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值