在开发中遇到一个问题,在对下游获取全量数据接口进行请求时,需要将标签对象(里面包含若干筛选属性,可能是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);
}
}
}
}