今天在调用支付接口时需要使用JSON形式参数向第三方发送请求, 整个流程需要调用好几个第三方接口, 这时就想到了可不可以把接收到的实体直接转换成map, 这样的话就不需要一个接口组装一次了, 于是就有了这一篇记录.
package com.pay.payversion.util;
import com.google.common.collect.Maps;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author: gst
* @date: 2023/6/5 11:19
*/
public class EntityToMapUtil {
public static <T> Map<String,Object> entityToMap(T t){
Map<String,Object> map = Maps.newHashMap();
//动态获取该类
Class clazz = (Class) t.getClass();
//取所有属性
Field[] fields = clazz.getDeclaredFields();
//将fields数组转化为集合使用stream流转换为map
map = Arrays.stream(fields).collect(Collectors.toMap(Field::getName, field -> {
Object resultObj = null;
//屏蔽java语言的访问检查 打开可以访问私有属性的权限
field.setAccessible(true);
try {
resultObj = field.get(t);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//Optional 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
//是 Java 8 中 Optional 类的一个方法,它的作用是将一个可能为 null 的对象转换为 Optional 对象,并在该对象不为 null 时执行一个函数,否则返回一个默认值。
//因为Collectors.toMap(key,value)中的value值不能为空, 所以这里使用Optional.ofNullable().orElse(), 为空则为""
return Optional.ofNullable(resultObj).orElse("");
}, (k1, k2) -> k2));
return map;
}
}
这个是使用反射获取的数据,最后转换成map的, 当时第一反应就是想到了用反射