首页 > 编程语言 >Java中通过反射获取自定义注解中标识的对象属性信息(若依@Excel注解示例)

Java中通过反射获取自定义注解中标识的对象属性信息(若依@Excel注解示例)

时间:2022-11-14 13:45:50浏览次数:61  
标签:name 自定义 示例 Excel private field 注解

场景

若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108278834

在上面进行excel导入导出时在实体类上可见有个注解@Excel

 

 

这是自定义的注解,可以添加在对象字段上,进而给字段添加一些额外的信息和处理逻辑等。

比如:

后台在excel导入时,需要校验哪些字段值为空,然后将不能为空的字段返回给前台进行提示。

但是在返回字段名称时直接返回后台实体类字段名称时不友好的,需要返回对应的含义名称,

比如早班人数不能为空直接返回早班人数,而不是morningShiftNum

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、首先自定义注解,比如这里的@Excel,就可以将注解作用在类上

/**
 * 自定义导出Excel数据注解
 *
 * @author ruoyi
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel
{
    /**
     * 导出时在excel中排序
     */
    public int sort() default Integer.MAX_VALUE;

    /**
     * 导出到Excel中的名字.
     */
    public String name() default "";

}

这里只做演示用,所以只保留了一个name属性

@Retention(RetentionPolicy.RUNTIME)表示注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在。

@Target(ElementType.FIELD)表示此注解的作用目标是字段和枚举的常量上

2、创建实体类,并添加上面的自定义注解

 

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LimitQuotaStatistics extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** id */
    private Long id;

    /** 部门id */
    private Long deptId;

    /** 部门名称 */
    @Excel(name = "部门名称")
    private String deptName;

    /** 夜班人数 */
    @Excel(name = "夜班人数")
    private Long nightShiftNum;

    /** 早班人数 */
    @Excel(name = "早班人数")
    private Long morningShiftNum;

}

3、通过反射获取对象属性的注解以及注解的值

field.getAnnotation(Excel.class).name()

具体示例:

    /**
     * 检查对象的属性是否为空
     * @param obj 检查对象
     * @param checkField 要检查的属性名list
     * @return 为空的属性名list
     * @throws IllegalAccessException
     */
    public static List<String> checkObjFieldIsNull(Object obj, List<String> checkField) throws IllegalAccessException {

        List<String> res = new ArrayList<>();
        //获取对象的类
        Class<?> aClass = obj.getClass();
        //获取对象的所有字段,包含public、private和proteced
        Field[] declaredFields = aClass.getDeclaredFields();
        //筛选出包含在要检查的list 并且 属性为null的字段
        Arrays.stream(declaredFields).forEach(field -> {
            //设置属性可访问
            field.setAccessible(true);
            try {
                if(checkField.contains(field.getName()) && field.get(obj) == null){
                    //获取自定义注解标识的属性名 如果没有则忽略
                    //res.add(field.getAnnotation(Excel.class).name());
                    //获取字段名
                    res.add(field.getName());
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });
        return res;
    }

测试结果

 

 

标签:name,自定义,示例,Excel,private,field,注解
From: https://www.cnblogs.com/badaoliumangqizhi/p/16888779.html

相关文章

  • Spring Boot 进阶——如何使用@Async注解提升API并发
    @Async注解用法1.在方法上使用@Async注解,申明该方法是一个异步任务;2.在类上面使用@Async注解,申明该类中的所有方法都是异步任务;3.使用此注解的方法的类对象,必须是spring......
  • Python量化中用pyecharts画K线示例
    首先需要安装Python软件,以及pyecharts库相关教程链接:龙哥量化:文档目录(股票,期货,通达信、同花顺、文华等软件使用,Python量化交易,策略编写,学习文档,策略案例等等) 1"""......
  • 第2章SpringMVC注解式开发-@RequestMapping
    第2章SpringMVC注解式开发[email protected]@RequestMapping定义请求规则2.1.1指定模块名称​ 通过@RequestMapping注解可以定义处理器对于请求的映射规则......
  • pycharm如何自定义模板?
    按照上图箭头方向设置即可. ......
  • C# 配置自定义的Config文件
    一、前言我在某个项目创建了一个config文件,想要对这个config文件的某个节点下添加连接字符串。于是乎,开启了百度、谷歌之旅...... 二、实现1.这是我创建的co......
  • JMeter自定义HTTP组件
    JMeter是一个优秀的开源项目,我们可以在jmeter的官网了解到如何使用和如何二次开发:https://jmeter.apache.org/因工作需要,最近做了一个JMeter自定义的http组件(其实就是在ht......
  • office2010添加宏到自定义快速访问工具栏
    1.建立相应的宏,名称分别:查找填充默认  2.点击“文件”菜单,“选项”卡  3.选择“快速访问工具栏”4.从“从下列位置选择命令”,选择“宏”5.则刚才的宏名自动出......
  • SpringAop入门学习(注解与配置文件版)
    SpringAop入门学习(注解与配置文件版)一、使用注解形式来完成Aop学习步骤一:创建maven项目,在pom.xml文件中输入以下两个坐标:<dependencies><!--spring坐标--......
  • 第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式
    第四十六章开发自定义标签-标签匹配操作中的运行时表达式指定标签的属性值,方法是将属性值放在方括号内,标签名称后是[]。<csr:rule>标记的match属性定义了CSP编译器......
  • 自定义的Qt统计折线图控件
    本控件用来显示一组统计数据,数据必须全为正,以折线图形式显示。可以添加折线颜色样式说明(即下图图表上方的甲公司、乙公司和丙公司的标识),参见文章“自定义的Qt给统计图添加......