对象转化为相应字段添加到指定map中

在开发中遇到一个问题,在对下游获取全量数据接口进行请求时,需要将标签对象(里面包含若干筛选属性,可能是String亦或是List<String>),需要将其转换为map并且添加到对应的参数中去

例如下面是我的请求对象,包含若干筛选条件

public class VehicleParamRequest {
    private String brand;
    private String Type;
    private List<String> project;
    ...
}

接口需要的参数如下

{
    "dynamicPara": {
        "brand": "VW",
		"Type": "1",
		"project": ["base","market"...],
		...
    }
}

这样就需要写一个工具类,将其转化才舒服

这里先感谢一下 hehaifeng 大佬

以下方法基于他的版本进行修改

/**
 * 用于将对象中不为null 和 ‘’ (空串) 的属性,增加到传入Map集合中
 */
public final class ObjectToMapUtil {

    private ObjectToMapUtil() {

    }
 
    /**
     *  对传入的对象进行数据清洗,将属性值为null和""的去掉,其他字段名和属性值存入map集合
     *  requestParameters 为要转换为键值对的对象
     *  dynamicPara 转换后的键值对添加到的目标集合
     */
    public static void objectToMap(Object requestParameters,Map<String, Object> dynamicPara) throws IllegalAccessException {
        // 获取f对象对应类中的所有属性域
        Field[] fields = requestParameters.getClass().getDeclaredFields();
        for (Field field : fields) {
            String varName = field.getName();
            // 获取原来的访问控制权限
            boolean accessFlag = field.isAccessible();
            // 修改访问控制权限
            field.setAccessible(true);
            // 获取在对象f中属性fields[i]对应的对象中的变量
            Object obj = field.get(requestParameters);
            if (obj != null && StringUtils.isNotBlank(obj.toString()) || CollectionUtil.isNotEmpty((Iterable<?>) obj)) {
                dynamicPara.put(varName, obj);
                // 恢复访问控制权限
                field.setAccessible(accessFlag);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值