java 字典项翻译

Springboot 字典翻译需求小写

前言

	有个需求在开发的过程中有坑,就记录下顺便也复习,有能优化的地方或别的方案,请在评论指点下我
	(查数据部分,没贴,sql自己组装)
	 ![请指教!](https://img-blog.csdnimg.cn/a2437c4732cd4f16bc4792889f0726c1.webp#pic_center)

需求

任务:导出一个word文档,有固定模板,我只需要对着模板查数据并按照前端想要的格式返回
要求格式:
	返回对象:
		个人信息对象:
		个人信息工作经历list<对象>:
		······
数据好查,但每个对象中的@Dict需要翻译		

思路

数据返回格式已经固定,那么就需要对这些数据进行遍历了,对,还有redis缓存,先从redis中取,空的话再去库中查
对对象进行遍历那只能 用反射进行初步遍历了(不是熟啊~淦),
1、先获取到所有对象(虽然不是每个表都有字典,但是我没在这做判断,直接遍历时把为空的过滤掉)
2、获取到每个对象了,就需要取得每个对象的值
3、因为有对象中有两种类型的对象(对象和List<对象>),所以需要判断两种类型分别进行处理
4、第一种直接用反射直接遍历,获取每个dice的字典值(也就是字典的key)和key所对应的value,
 第二种一样需要,只不过是需要先遍历一遍,获取list中所有的对象
 5、最后就是拿到字典的code和value就能查唯一个text了

代码

public class test {


    public static void main(String[] args) throws IllegalAccessException {
        try {
            //最终数据返回对象
            TeacherInfoVO vo = new TeacherInfoVO();

			//类型一
            Teacher teachers = new Teacher();
            teachers.setSex("1");
            vo.setTeachers(teachers);
			//类型二
            List<student> tList = new ArrayList<>();

            studentt = new student();
            t.setId("123");
            t.setSex("1");
            tList.add(t);

            studentt2 = new student();
            t2.setId("aaa");
            t2.setSex("2");
            tList.add(t2);

            vo.setStudent (tList);

            //反射遍历对象,获取所有属性
            //oConvertUtils.getAllFields(vo) 自己工具类,可以替换vo.getClass().getDeclaredFields()
            for (Field field : oConvertUtils.getAllFields(vo)) {
                //因为对象内的属性是private,所以无法访问要先禁止Java语言访问检查,反之亦然
                field.setAccessible(true);
                Object o = field.get(vo);
                //通过反射获取属性的类型
                if (o instanceof Teachers) {
                    System.out.println("object 类型判断进入" + o);
                    getDictText(o);
                }
				
				//通过反射获取属性的类型
                if ("java.util.List".equals(field.getType().getName())) {
                    List list = (List) field.get(vo);
                    for (Object obj : list) {
                        getDictText(obj);
                    }
                }

                field.setAccessible(false);
            }
        } catch (Exception e) {
        // 会有空指针异常记得处理
//                e.printStackTrace();
        }
    }

    public static void getDictText(Object obj) throws IllegalAccessException {
        for (Field item : obj.getClass().getDeclaredFields()) {
            item.setAccessible(true);
            if (item.getAnnotation(Dict.class) != null) {
                String code = item.getAnnotation(Dict.class).dicCode();
                //取值方式一
                String value = (String) item.get(obj);
                //有code和value就可以去redis或数据库将数据取出
				//取字典代码(方式不同我就不写了)·······
                System.out.println("code: " + code + " --- " + "value: " + value);
            }
            item.setAccessible(false);
        }
    }

// 取值方式二,先将遍历的对象转为json,这样就是(key,value)的储存形式,再拿属性名去取每个对象的属性值
//        JSONObject item = (JSONObject)JSONObject.toJSON(teachers);
//        String value = item.getString(field.getName());

}

打完收工

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值