反射
import java.lang.reflect.Field;
public static void main(String[] args) {
System.out.println(getFieldMapStr(new Result(true, "请", -1)).toString());
}
/**
* 获取字段(反射)
*
* @param args
* @param <T>
* @return
*/
public static <T> Map<String, Object> getFieldMapStr(T args) {
Map<String, Object> res = new HashMap<>();
Field[] fields = args.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
//设置是否允许访问,不是修改原来的访问权限修饰词。
fields[i].setAccessible(true);
try {
res.put(fields[i].getName(), fields[i].get(args));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return res;
}
public static String getFieldStr(String field) {
if (not(field)) {
return "";
}
return field.replace("get", "").toLowerCase();
}
{msg=请, NO_PERMISSION=2, serialVersionUID=1, NO_LOGIN=-1, SUCCESS=0, code=-1, data=true, FAIL=1}
反射导出
针对简单excel导出下载(利用反射完成):
public void export(
//wb为HSSFWorkbook对象由于我写的时候需要创建多个sheet故每次调用传同一个wb
//sheetName就是工作簿的名字,此处工作簿的名字不能相同
//columns 由于差的数据并一定需要将整个javabean全部属性都导出,故传所需name进行get方法拼接
//headers用于传入每个sheet中第一排每一列的列名,不可能直接给客户看属性名对吧!
HSSFWorkbook wb,String sheetName,String[] headers, String[] columns,List<T> lists)
throws Exception
{
//创建一个空的sheet工作簿
HSSFSheet sheet = wb.createSheet(sheetName);
//列宽
sheet.setDefaultColumnWidth(15);
HSSFCellStyle style = wb.createCellStyle();
HSSFRow row = sheet.createRow(0);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
//设置列名
for (int i = 0; i < headers.length; i++) {
HSSFCell headerCell = row.createCell(i);
headerCell.setCellValue(headers[i]);
headerCell.setCellStyle(style);
}
//遍历对象
Iterator<T> it = lists.iterator();
int rowIndex = 0;
while (it.hasNext()) {
rowIndex++;
row = sheet.createRow(rowIndex);
Object t =it.next();
//得到某个对象的所有属性
Field[] fields = t.getClass()
.getDeclaredFields();
//进行对比,有就执行拼接,进行get,invoke赋值
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
for (int j = 0; j < columns.length; j++) {
if (fieldName.equals(columns[j])) {
String getMethodName = "get" +
fieldName.substring(0, 1).
toUpperCase() + fieldName.
substring(1);
Class cls = t.getClass();
Method getMethod = cls.getMethod(
getMethodName, new Class[] {});
Object val = getMethod.invoke(
t, new Object[] {});
String textVal = null;
if (null != val) {
textVal = val.toString();
} else {
textVal = null;
}
row.createCell(j).
setCellValue(textVal);
}
}
}
}
}
开启:对象
//创建一个excel对象
HSSFWorkbook wb = new HSSFWorkbook();
String sheetName1="工作簿名";
String [] headers1={"第一列名1”,"","","",""};
String [] columns1={"属性名1","","","","",""};
调用
List<T> list1=(List<T>) iBusinessManagerService3.countQsqy(params).getData();
iBusinessManagerService3.export(wb, sheetName1, headers1, columns1, list1);
导出:下载式
response.setContentType("application/OCTET-STREAM;charset=utf-8");
// // 设置文件头:最后一个参数是设置下载文件名
response.addHeader("Content-Disposition", "attachment;filename=" + new String("excel名字".getBytes(),"ISO8859-1") + ".xls");
// // 获取输出流
OutputStream out = null;
out = response.getOutputStream();
wb.write(out);
out.flush();
out.close();
代码
boot-poi
方法
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>RELEASE</version>
</dependency>
前者用于引入HSSFWorkbook;后者用于引入XSSFWorkbook
xls(03版本) 和xlsx(07及之后版本)
public Boolean isExcelNew(String path){
return path.matches("^.+\\.(?i)(xlsx)$");
}
public Boolean isExcelOld(String path){
return path.matches("^.+\\.(?i)(xls)$");
}