@Dict注解返回时不生效问题解决

144 阅读1分钟

1.问题描述

后端实体属性已加上注解,但是在返回时并没有dictText字段生成

/**
  * 性别(1:男 2:女)
  */
@Dict(dicCode = "sex")
private Integer sex;
/**
*表名sys_user 会根据username找出realname然后再返回时会有username_dictText字段生成
*这个字段就是realname值
*/
@Dict(dicCode = "username",dictTable="sys_user",dicText="realname")
private String username;

2.发生原因

在DictAspect.java中找到了问题所在

可以看到只有当返回类型为IPage时才会进行字典转换

public void parseDictText(Object result) {
        if (result instanceof Result && ((Result)result).getResult() instanceof IPage) {
            List<JSONObject> items = new ArrayList();

            Object record;
            JSONObject item;
            label59:
            for(Iterator var3 = ((IPage)((Result)result).getResult()).getRecords().iterator(); var3.hasNext(); items = this.makeJSONObject(record, item, (List)items)) {
                record = var3.next();
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";

                try {
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException var20) {
                    log.error("json解析失败" + var20.getMessage(), var20);
                }

                item = JSONObject.parseObject(json);
                Field[] var8 = record.getClass().getDeclaredFields();
                int var9 = var8.length;

                for(int var10 = 0; var10 < var9; ++var10) {
                    Field fld = var8[var10];
                    if ("children".equals(fld.getName())) {
                        List<JSONObject> childrenItems = new ArrayList();

                        try {
                            Iterable children = (Iterable)record.getClass().getMethod("getChildren").invoke(record);
                            if (children == null) {
                                break;
                            }

                            Iterator var14 = children.iterator();

                            while(true) {
                                if (!var14.hasNext()) {
                                    continue label59;
                                }

                                Object childrenRecord = var14.next();
                                ObjectMapper childrenMapper = new ObjectMapper();
                                String childrenJson = "{}";

                                try {
                                    childrenJson = childrenMapper.writeValueAsString(childrenRecord);
                                } catch (JsonProcessingException var19) {
                                    log.error("json解析失败" + var19.getMessage(), var19);
                                }

                                JSONObject childrenItem = JSONObject.parseObject(childrenJson);
                                childrenItems = this.makeJSONObject(childrenRecord, childrenItem, (List)childrenItems);
                                item.replace("children", childrenItems);
                            }
                        } catch (Exception var21) {
                            log.error(var21.getMessage());
                            break;
                        }
                    }
                }
            }

            ((IPage)((Result)result).getResult()).setRecords((List)items);
        }

    }

3.解决方法

// 定义一个map
Map<String, Object> map = new HashMap<>();
User user = new User();
map.put("@transFields@", Arrays.asList("user"));// 把所需要的返回值跟key关联 Arrays.asList("user")
map.put("user",user); // 在把user的实体类放入
return Result.ok(map);