如何给 @ExcelProperty 动态传参
时间: 2023-07-04 15:23:33 浏览: 271
Spring Boot使用EasyExcel导入导出Excel
在Java中,给 `@ExcelProperty` 动态传参可以通过自定义注解并配合反射实现。具体步骤如下:
1. 自定义注解 `@ExcelField`,定义注解属性 `value` 用于存储表头名称。
```
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelField {
String value();
}
```
2. 在实体类中添加 `@ExcelField` 注解,并使用反射获取注解属性值。
```
public class User {
@ExcelProperty(index = 0)
@ExcelField(value = "用户名")
private String username;
@ExcelProperty(index = 1)
@ExcelField(value = "密码")
private String password;
// getter and setter
public static List<List<String>> getDataList(List<User> userList) {
List<List<String>> dataList = new ArrayList<>();
List<String> headerList = new ArrayList<>();
// 获取表头
Field[] fields = User.class.getDeclaredFields();
for (Field field : fields) {
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
if (excelProperty != null) {
int index = excelProperty.index();
String headerName = field.getAnnotation(ExcelField.class).value();
headerList.add(headerName);
}
}
dataList.add(headerList);
// 获取数据
for (User user : userList) {
List<String> data = new ArrayList<>();
for (Field field : fields) {
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
if (excelProperty != null) {
field.setAccessible(true);
Object obj = field.get(user);
String value = obj == null ? "" : obj.toString();
data.add(value);
}
}
dataList.add(data);
}
return dataList;
}
}
```
在上面的代码中,`@ExcelField` 注解用于存储表头名称,`getDataList` 方法通过反射获取实体类中的属性和注解信息,从而动态获取表头名称。
这样,我们就可以通过自定义注解 `@ExcelField` 并配合反射来实现给 `@ExcelProperty` 动态传参的功能。
阅读全文