晨港飞燕刘彦登

编程技术

首页 归档 关于 联系

📢 欢迎来到我的博客!这里主要分享编程技术相关内容,如有问题欢迎留言讨论~

Java自定义注解+反射实现字典码值转换

一.定义自定义注解

@Retention(RetentionPolicy.RUNTIME)//什么时候使用该注解,这里定义为运行时
@Target(ElementType.FIELD)//注解用于什么地方,这里定义为作用于属性上
public @interface Dict {
    //字典类型,必需(创建字典时的key值)
    String key();
    //默认值,可选,值为null时使用默认值
    String defaultValue() default "";





   // OperateType operateType() default OperateType.ADD;
//   public static enum OperateType {
//       ADD("ADD", "1"),
//       UPDATE("UPDATE", "2"),
//       DELETE("DELETE", "3");
//
//       private String name;
//       private String index;
//
//       private OperateType(String name, String index) {
//           this.name = name;
//           this.index = index;
//       }
//
//       public String getIndex() {
//           return this.index;
//       }
//
//       public String getName() {
//           return this.name;
//       }
//   }
}

---------------------------------------------------------------------------------
@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
public @interface InnerDict {
}

二.字典转换工具类

需要改工具类中的数据获取方式SysCacheTools.getCacheDict

/**
 * 功能描述:
 * 实体或实体List中字段值与字典数据转换工具
 * 用法说明:
 * transcoding方法传入一个实体类型,或者一个实体List类型,在想要转换的属性字段上标注 @Dict 注解。
 * @version V1.0
 * @author: liuyandeng
 */
public class DictUtil {
    //数据类型
    private static String OBJECT_STR = "java.lang.object";

    public static void transcoding(Object object) {
        try {
            if (object != null) {
                if (object instanceof List) {
                    listTranscoding((List<?>) object);
                } else {
                    singleTranscoding(object);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 递归转换List集合
     */
    private static void listTranscoding(List<?> beanList) throws Exception {
        if (CollectionUtils.isNotEmpty(beanList)) {
            Class<?> clazz = beanList.get(0).getClass();
            //本类及其父类的属性集合
            List<Field> allFieldList = new ArrayList<>();
            //递归获取本身及父类的属性
            //当父类不是object并且为null的时候说明到达了最上层的父类(form继承的Entit
posted @ 2022-03-27 01:07  晨港飞燕刘彦登  阅读(102)  评论(0)    收藏  举报  来源