注解实现替代状态码,转换成汉字

当列表页字段很多,同时状态码很多,在代码里面进行繁琐的替换,于是就想使用自定义注解,实现实体类替换状态码,使用反射,寻找实体类中的字段,进行识别注解,然后进行替换值。话不多说,直接上代码
需要注意的是使用了复注解,所以需要额外注意下

父注解:
/**

  • 用来替换很多字典中的状态码
    */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    public @interface DictValueConverts {
    // 用于支持重复使用注解
    DictValueConvert[] value();
    }

子注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Repeatable(DictValueConverts.class) // 添加 @Repeatable 元注解,用来指定哪个容器进行重复使用
public @interface DictValueConvert {
// 状态码
String value();
// 要替换的具体值
String replaceValue();
}

实体类示例

@DictValueConverts({
@DictValueConvert(value = “1” ,replaceValue = “计算1”),
@DictValueConvert(value = “2” ,replaceValue = “计算2”)
})
private String type;

/**
 * 替换字典值
 * @param entity
 */
private static void replaceFieldValuesUsingAnnotations(ResEquipmentEntity entity) {
    Field[] fields = entity.getClass().getDeclaredFields();
    for (Field field : fields) {
        if (field.isAnnotationPresent(DictValueConverts.class)) {
            // 因为重复使用注解,所以需要找到父注解下的子注解
            DictValueConverts dictValueConverts = field.getAnnotation(DictValueConverts.class);
            String fieldValue = getFieldValue(entity, field);
            DictValueConvert[] dictValueConvertArray = dictValueConverts.value();
            for(DictValueConvert dictValueConvert : dictValueConvertArray){
                if (dictValueConvert.value().equals(fieldValue)) {
                    setFieldValue(entity, field, dictValueConvert.replaceValue());
                }
            }
        }
    }
}
// 得到字段信息
private static String getFieldValue(Object entity, Field field) {
    field.setAccessible(true);
    try {
        return (String) field.get(entity);
    } catch (IllegalAccessException e) {
        e.printStackTrace();
        return null;
    }
}
//重新进行赋值
private static void setFieldValue(Object entity, Field field, String value) {
    field.setAccessible(true);
    try {
        field.set(entity, value);
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值