【SpringBoot】SpringBoot中自定义注解的使用及后端进行Excel的生成、下载操作

更新时间:2023-08-11 22:09:46 阅读: 评论:0

【SpringBoot】SpringBoot中⾃定义注解的使⽤及后端进⾏Excel的⽣成、下载
操作
1、创建⼀个⾃定义的注解
创建⾃定义注解的过程与创建⼀般类的过程差不多,项⽬上右键——>new——>annotation,然后页⾯上弹出如下的界⾯:
在这个弹窗上,主要介绍下上述123位置处的三个注解:
@Target
指⽰这个注解的使⽤范围,即被描述的注解可以⽤在哪⾥,常⽤的值如下:
TYPE:类,接⼝或者枚举
FIELD:属性字段,包含枚举常量
METHOD:⽅法
PARAMETER:参数
CONSTRUCTOR:构造⽅法
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解类型
PACKAGE:包
@Retention
指明修饰的注解的⽣存周期,即会保留到哪个阶段,常⽤的值如下:
SOURCE:源码级别保留,编译后即丢弃
CLASS:编译级别保留,编译后的class⽂件中存在,在jvm运⾏时丢弃,这是默认值。
RUNTIME:运⾏级别保留,编译后的class⽂件中存在,在jvm运⾏时保留,可以被反射调⽤。
@Documented
表明这个注解应该被 javadoc⼯具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被javadoc 之类的⼯具处理, 所以注解类型信息也会被包括在⽣成的⽂档中,是⼀个标记注解,没有成员。
创建⽣成的注解类如下所⽰:
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Documented
@Retention(RUNTIME)
@Target(FIELD)
public @interface ExcelField {
/**
* excel表的列名
* @return
*/
String columnName()default"";
/**
* 设置excel的列号
* @return
*/
int index()default1;
/**
then怎么读* 设置excel的列宽
* @return
*/
int columnWidth()default7000;
}
⾃定义注解的创建规则:
(1)注解类中参数成员只能⽤public或默认(default)这两个访问权修饰;
(2)参数成员只能⽤基本类型byte,short,char,int,long,float,double,boolean⼋种基本数据类型和String、Enum、Class、annotations等数据类型,以及这⼀些类型的数组;九月缩写
(3)通过Java的反射技术来获取 -Annotation对象,从⽽来获取类⽅法和字段的注解信息。
2、⾃定义注解的使⽤
完成了第⼀步就可以使⽤注解了,这⾥借助⼀个将表格数据下载到本地Excel表格的开发实例来阐述⾃定义注解的使⽤,在Java中Excel表格的开发需要⽤到apache POI这个组件,这⾥只介绍使⽤,其他的信息可以参考官⽹,地址: ;在项⽬中引⼊相关的依赖:
<!-- apache POI -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
在Model层的实例中使⽤⾃定的注解来标注实例中的字段:
@Data
public class Ur {
@ExcelField(columnName="姓名",index=1,columnWidth=5000)
private String urname;
英语6级查分@ExcelField(columnName="邮箱",index=3)
private String email;
@ExcelField(columnName="⼿机号",index=2)
private String mobileNumber;
.....其他的字段的就不⼀⼀列举了
}
POI的使⽤:
/**
* ⽣成⼀个XSSFWorkBook对象
* @param urs
* @return
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
private XSSFWorkbook createExcelWorkBook(List<Ur> urs)throws IllegalArgumentException, IllegalAccessException { // 创建workbook
XSSFWorkbook wb =new XSSFWorkbook();
// 设置基本样式
XSSFCellStyle Style(wb,fal);
basicStyle.tWrapText(true);// 设置单元格中的数据可以多⾏显⽰
// 创建sheet
sorry sorry下载XSSFSheet ateSheet("sheet名称");
// 先创建⼀个表头⾏
XSSFRow ateRow(0);成都会计>46级报名入口官网
headRow.tHeightInPoints(30);
// 编号单元格
Field[] fields=DeclaredFields();
for(int i =0; i <fields.length; i++){
fields[i].tAccessible(true);
ExcelField excelField=fields[i].getAnnotation(ExcelField.class);
if(excelField!=null){
sheet.tColumnWidth(excelField.index(), lumnWidth());
}
}
int rowNum=1;
for(; rowNum < urs.size()+1; rowNum++){
// 创建⾏
XSSFRow ateRow(rowNum);
dataRow.tHeightInPoints(18);
// 设置编号列
// 添加其他数据列单元格
for(int i =0; i<fields.length ; i++){
fields[i].tAccessible(true);
ExcelField excelField=fields[i].getAnnotation(ExcelField.class);
if(excelField!=null){
Object obj=fields[i].(rowNum-1));
}
}
}
return wb;
}
这⾥我们⽤到了⼀个⼯具类(ExcelUtils),⽤于设置excel的基本格式:
public class ExcelUtils {
/**
* 设置Excel表格的基本样式
* 设置Excel表格的基本样式
* @param workbook
* @param isSuperLink
* @return
*/
public static XSSFCellStyle getStyle(XSSFWorkbook workbook,boolean isSuperLink){
// 设置字体;
XSSFFont font = ateFont();
// 设置字体⼤⼩;
font.tFontHeightInPoints((short)10);
// 设置字体名字;
font.tFontName("simsun");
// font.tItalic(true);
// font.tStrikeout(true);
if(isSuperLink){
font.tUnderline((byte)1);
font.tColor(IndexedColors.BLUE.index);
}
// 设置样式;
XSSFCellStyle style = ateCellStyle();
clouda// 设置底边框;
style.tBorderBottom(BorderStyle.THIN);
// 设置底边框颜⾊;
style.tBottomBorderColor(IndexedColors.BLACK.index);
// 设置左边框;
style.tBorderLeft(BorderStyle.THIN);
// 设置左边框颜⾊;
style.tLeftBorderColor(IndexedColors.BLACK.index);
// 设置右边框;
style.tBorderRight(BorderStyle.THIN);
// 设置右边框颜⾊;
style.tRightBorderColor(IndexedColors.BLACK.index);
// 设置顶边框;
style.tBorderTop(BorderStyle.THIN);
// 设置顶边框颜⾊;
style.tTopBorderColor(IndexedColors.BLACK.index);
// 在样式⽤应⽤设置的字体;
style.tFont(font);
/
/ 设置⾃动换⾏;
style.tWrapText(fal);
// 设置⽔平对齐的样式为居中对齐;
style.tAlignment(HorizontalAlignment.CENTER);
// 设置垂直对齐的样式为居中对齐;
style.tVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
public static XSSFCell createCell(int cellnum, Object value, XSSFRow row,XSSFCellStyle style){  XSSFCell cell = ateCell(cellnum);
if(value == null){
cell.tCellValue("");
cell.tCellStyle(style);
return cell;
}
Class().getName().equals("java.lang.String")){
cell.tCellValue(new String()));bbc新闻台
}el Class().getName().equals("java.lang.Double")){
cell.tCellValue((Double) value);
}el Class().getName().equals("java.lang.Integer")){
cell.tCellValue((Integer) value);
}el Class().getName().equals("java.lang.Long")){
cell.tCellValue((Long) value);
}el Class().getName().equals("java.math.BigDecimal")){
cell.tCellValue(((BigDecimal) value).doubleValue());
}el Class().getName().equals("java.util.Date")){
cell.tCellValue(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(value)); }
cell.tCellStyle(style);
return cell;
}
}
测试下载:
List<Ur> urs =.........获取Ur集合;
XSSFWorkbook xssfWorkbook =createExcelWorkBook(urs);
String fileName ="Ur-Informations"+ System.nanoTime()+".xlsx";
// 设置响应头,让浏览器下载⽂件
respon.tHeader("Content-Disposition","attachment;filename="+ fileName);
respon.tContentType("application/vnd.ms-excel;chart=UTF-8");
OutputStream output = OutputStream();
xssfWorkbook.write(output);
output.flush();
output.clo();
前端请求⽅式:
function ndMessage(){
var url ="xxxxxxx/...";
var token="XXJJDNNCCJ";
var xhr =new XMLHttpRequest();
buckeyexhr.open('post', url,true);
xhr.tRequestHeader("Authorization", token);
if(this.status ===200){
var blob =spon;
console.log(blob);
var reader =new FileReader();
怪物史莱克2插曲
var a = ateElement('a');
a.download ='表格.xlsx';
a.href = sult;
$("body").append(a);
a.click();
$(a).remove();
}
}el if(this.status ===401){
alert("未登录!");
}
};
xhr.nd();
}

本文发布于:2023-08-11 22:09:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1129552.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:注解   设置   表格   基本   定义   创建
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图