用isAnnotationPresent判断类里的字段是否有注解做导出用一直返回false,求大神帮忙看看问题倒是怎么引起的

sinat_36821635 2019-01-23 06:53:04
使用这个isAnnotationPresent方法判断实体类里的字段是否有注解做导出用一直返回false,看了好久不知道是怎么引起的

1-实体
@Data
@EqualsAndHashCode(callSuper=false)
@ToString
public class SysJob extends AbstractPo {
private static final long serialVersionUID = 1L;

/** 任务ID */
@Excel(name = "任务序号", sort = 0)
private String jobId;

/** 任务名称 */
@Excel(name = "任务名称", sort = 0)
private String jobName;

/** 任务组名 */
@Excel(name = "任务组名", sort = 0)
private String jobGroup;

/** 任务方法 */
@Excel(name = "任务方法", sort = 0)
private String methodName;

/** 方法参数 */
@Excel(name = "方法参数", sort = 0)
private String methodParams;

/** cron执行表达式 */
@Excel(name = "执行表达式 ", sort = 0)
private String cronExpression;

/** cron计划策略 */
@Excel(name = "计划策略 ", sort = 0)
private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT;

/** 任务状态(0正常 1暂停) */
@Excel(name = "任务状态", sort = 0)
private String status;

}
2-自定义的Excel注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel {

/** 对应的列名称 */
abstract String name() default "";
/**
* 提示信息
*/
public abstract String prompt() default "";

/**
* 设置只能选择不能输入的列内容.
*/
public abstract String[] combo() default {};

/** 列序号 */
abstract int sort();

/** 字段类型对应的格式 */
abstract String format() default "";

/** 是否需要校验 */
abstract boolean isCheck() default false;

/** 校验字段长度 */
abstract int fieldLength() default 50;

/** 校验是否可以为空 */
abstract boolean isEmpty() default true;
/**
* 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
*/
public abstract boolean isExport() default true;
}
3-用junit测试就没问题
public class JunitTest extends BaseTest {


@Test
public void test01() {
Field[] allFields = new SysJob().getClass().getDeclaredFields();
// 得到所有field并存放到一个list中.
for (Field field : allFields) {
System.out.println(field + "===1==" + field.isAnnotationPresent(Excel.class));
System.out.println(field + "==2===" + field.getAnnotation(Excel.class));
}

}
}
4-调用这个工具类的时候走到这块判断isAnnotationPresent一直返回false
public class ExcelUtil<T> {
private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class);

public Class<T> clazz;

public ExcelUtil(Class<T> clazz) {
this.clazz = clazz;
}

/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @return 结果
*/
public String exportExcel(List<T> list, String sheetName) {
OutputStream out = null;
HSSFWorkbook workbook = null;
try {
// 得到所有定义字段
Field[] allFields = clazz.getDeclaredFields();
List<Field> fields = new ArrayList<Field>();
// 得到所有field并存放到一个list中.
for (Field field : allFields) {
if (field.isAnnotationPresent(Excel.class)) {
fields.add(field);
}
}
5-这是我调用的地方
@RequestMapping("/exportsExcel")
@ResponseBody
public void exportsExcel(HttpServletResponse response) throws Exception {
ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
List<SysJob> arrayList = new ArrayList<SysJob>();
SysJob sysJob1 = new SysJob();
sysJob1.setJobId("1");
sysJob1.setJobName("121313");
sysJob1.setJobGroup("qweqwe");
sysJob1.setStatus("0");
arrayList.add(sysJob1);
util.exportExcel(arrayList,"测试");
}
...全文
1067 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aqiao168 2019-11-28
  • 打赏
  • 举报
回复
请管理员知悉,我并不是在灌水,我在百度上搜索这个问题,只有这个楼主说可以解决,请管理员手下留情,我确实是在请教这个问题的解决方法。 请问楼主,这个问题是如何解决的,我刚刚在开发中也遇到了同样的问题。
sinat_36821635 2019-01-24
  • 打赏
  • 举报
回复
问题已解决,是我的自定义注解问题

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧