zoukankan      html  css  js  c++  java
  • 将输出实体对象中的某些字段过滤掉的方法

    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);
    
        }
    }
    

      

  • 相关阅读:
    iOS适配 旧项目工程在iOS9下不能正常显示
    字典的操作
    均摊时间复杂度
    C++基础
    机器学习入门学习线路
    C\C++对文件的读写操作
    python 函数基础
    关于string的练习题目
    C++之STL之string
    C++STL库之set的用法
  • 原文地址:https://www.cnblogs.com/amberdyy/p/10944756.html
Copyright © 2011-2022 走看看