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
技术改变世界

浙公网安备 33010602011771号