将输出实体对象中的某些字段过滤掉的方法

1.工具类方法很使用,代码如下:

package com.netease.klqa.report.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;

public class AttributesExtractUtils {

        /**
         * 从集合中提取信息
         *
         * 适用于:list<对象>
         *
         * @param targets
         * @param targetFields
         * @return
         */
        public static List<Map<String, Object>> extractForCollection(Collection<?> targets, String... targetFields) {
            List<Map<String, Object>> result = new ArrayList<>();
            for (Object target : targets) {
                result.add(extract(target, targetFields));
            }
            return result;
        }

        /**
         * 从普通POJO类中提取关键信息, 要求遵循 getMethod 规范
         *
         * @param target       目标JAVA POJO类,要求装有数据
         * @param targetFields 类的属性名字: 希望从 POJO 中提取哪些字段的数据
         * @return 数据会被装载于MAP中
         */
        public static Map<String, Object> extract(Object target, String... targetFields) {
            if ((null == target) || null == targetFields || 0 == targetFields.length) {
                return new HashMap<>();
            }
            Map<String, Object> objectMap = new HashMap<>();
            for (String targetField : targetFields) {
                Class<?> targetClass = target.getClass();
                try {
                    Field field = targetClass.getDeclaredField(targetField);
                    String methodNamePrefix = field.getType().getName().equals("boolean") ? "is" : "get";
                    String methodName = methodNamePrefix + String.valueOf(targetField.charAt(0)).toUpperCase()
                            + targetField.substring(1);
                    Method targetMethod = targetClass.getMethod(methodName);
                    Object invoke = targetMethod.invoke(target);
                    objectMap.put(getNameOfElegant(targetField), invoke);
                } catch (Exception e) {
                    System.out.println(e);
                }
            }
            return objectMap;
        }

    private static String getNameOfElegant(String old) {
        StringBuilder stringBuilder = new StringBuilder();
        for (char c : old.toCharArray()) {
            if (Character.isUpperCase(c) && stringBuilder.length() > 0) {
                stringBuilder.append("_");
            }
            stringBuilder.append(c);
        }
        return stringBuilder.toString().toLowerCase();
    }

}

2.在具体方法controller层代码中编辑,示例如下:

for (String tempKey : linkNames) {
    if (!jsonObject.containsKey(tempKey)) {
        
        LinkList tempModel = new LinkList();

        tempModel.setId(-1);
        tempModel.setVersionId(0);
        tempModel.setLinkName("");
        tempModel.setLinkUrl("");
        tempModel.setCaseTotal(0);
        tempModel.setPassRate(0);
        tempModel.setBugNum(0);
        tempModel.setRemarks("");
        tempModel.setIsDelete(0);

       //设置需要输出的实体中的字段,没有罗列的就不输出
        Map<String, Object> linklistExtracted = 
AttributesExtractUtils.extract(tempModel, "id", "linkName", "linkUrl",
                "caseTotal", "passRate", "bugNum", "remarks", "isDelete");


        jsonObject.put(tempKey, linklistExtracted);

    }
}

  

猜你喜欢

转载自www.cnblogs.com/amberdyy/p/10944756.html