Java中注解学习系列教程-5 excel汇出优化初级阶段 在上一篇文章中,我们实现了使用自定义注解汇出Excel的小案例。但是有问题的。我们发现,如果物件属性中包含了date型别或者使用了列举类。这个时候就会出问题。我们来看看问题所在:
是不是已经看到了结果:性别出现了1和0 ,而日期也出现的格式不是我们习惯的格式。.在来看看这个1是怎么来的。
是从列举类GenderEnum中来的。
我们来看看性别列举类:
现在来说说本文我们主要解决的问题:
1:怎么对日期进行格式化?
2:怎么对列举类进行转中文?
一:怎么对日期进行格式化
通过前几篇文章学习中,我们知道了怎么自定义注解及使用。我们也知道自定义列举类的成员属性可以有八大基本型别及其他型别。
分析:
那么我们可不可以用boolean来标识是否使用日期,在使用string型别对日期进行格式?
1.1:在自定义注解的成员变数中,我们定义一个Boolean型别的成员,用来标注要开始对日期进行格式化了。
/**
* 是否需要格式化日期.
* 改字段必须注解在date型别的字段上。否则会有问题
* @return
*/
public abstract boolean isDateFormat default false;
1.2:我们使用String型别的成员变数,来对日期进行格式化:
/**
* 日期格式化 format
* @return
*/
public abstract String dateFormatSdf default yyyy-MM-dd;
1.3:那么怎么使用呢?
我们在AnnotationUserPoJo这个类的private Date birthDay;属性上使用:
/**
* 生日
*/
@ExcelAnnotation(ZHName = 生日, colum =C ,isDateFormat = true,dateFormatSdf = yyyy-MM-dd)
// @ExcelAnnotation(ZHName = 生日, colum =C)
private Date birthDay;
这样就可以了。
1.4:那么怎么解析呢?
在excel汇出工具类中:
二:怎么对列举类code进行转中文?
分析:我们知道自定义注解的属性还支援Class型别的。所以我们可以使用一个class属性的成员来标识是哪个列举物件;
使用String型别的属性来标识呼叫列举类中的那个方法;
同样使用class型别标注,需要呼叫方法的引数型别。
经过分析,我们就能得到一些资料:
2.1:在自定义注解中,使用class型别的属性标识是哪个列举物件:
/**
* 列举类的类
* @return
*/
public abstract Class EnumClazz default String.class;
2.2:使用String型别的属性标注呼叫列举类中的哪个方法进行code转中文
/**
*列举类的方法
* @return
*/
public abstract String EnumMethodName default getDescriptionByCode;
2.3:同样使用class型别的属性标注,呼叫方法中的引数型别:
/**
* 列举类的方法的引数
* @return
*/
public abstract Class methodArgClass default Integer.class;
2.4:列举类中code转行中文使用
/**
* 性别
*/
@ExcelAnnotation(ZHName = 性别, colum =D, EnumClazz=GenderEnum.class,
EnumMethodName = getDescriptionByCode ,methodArgClass=Integer.class )
// @ExcelAnnotation(ZHName = 性别, colum =D)
private Integer Gender;
2.5:解析注解时候对列举类处理:
Class clazz = attr.EnumClazz;
if(!java.lang.String.equals(clazz.getName)){ //需要进行转换
Method method = clazz.getMethod(attr.EnumMethodName,attr.methodArgClass);
Object obj = method.invoke(clazz,field.get(vo));
if(null != obj ){
cell.setCellValue( obj.toString);
}else{
cell.setCellValue( );
}
}else{
cell.setCellValue(field.get(vo) == null ?
: attr.pre+String.valueOf(field.get(vo))+attr.suffix);
}
写完之后。我们重写进行测试:
汇出的excel是我们需要的结果。OK ,优化初级阶段ok了。
看到很多朋友说程式码怎么不贴全。因为excel汇出太多程式码了。后面凯哥会放到git上,供大家下载。
下篇预告:在下一篇文章中,我们将进行plush版升级改造。也是我们Java注解学习系列最后一篇文章。
宣告:本文是《Java中注解学习系列教程》第五篇文章-小案例,使用自定义注解实现Excel汇出优化初级阶段。