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

博客给出了Java工具类方法的代码,还展示了在具体方法controller层代码中的编辑示例,内容转载自相关博客。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    }
}

  

转载于:https://www.cnblogs.com/amberdyy/p/10944756.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值