Map转对象工具类
Map转自定义Object–自定义工具类
在 springmvc 框架中:
参数接收–到封装进自定义实体类是可以借助框架自动完成的
但是如果我们没有使用框架,或者某些特定代码,或者并不在控制层中。此情况下我们也许无法使用借助 springmvc 提供好的注解或者代码工具。
此工具类是将不确定的 Map 对象转换封装进实体
Map
工具类如下:
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;
/**
*
* 〈map 转 自定义实体类 自定义工具类〉
* @author Zy0116
* @create 2018/11/16
* @since 1.0.0
*/
public class Map2ObjectUtil {
public static Object map2Object(Map<String, Object> map, Class<?> clazz) {
if (map == null) {
return null;
}
Object obj = null;
try {
obj = clazz.newInstance();
// 获取自定义clazz类的全部字段
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
// 获取字段修饰符 需要排除静态及final修饰的字段
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
// 强制设置为 true 即可以对字段值进行设置 防止一些方法阻碍我们对属性进行赋值
field.setAccessible(true);
// map 中如果包含字段名称的 key 则将对应的值放入 clazz 对象对应的字段上
if (map.containsKey(field.getName())){
field.set(obj, map.get(field.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
说明几点:
- 之所以使用的是反射中 getDeclaredFields() 方法来获取全部字段
- 是因为我们不仅需要 public 修饰的成员,同样需要private等其它修饰符修饰的字段至于 static 静态修饰的,我们可以将它理解为常量(即从有它开始 就已经是固定不变的)。
- 关于 getModifiers() 方法,可能我们并不常用,此方法是获取调用字段在类中的修饰符,我们可以以此来判断如果处理字段。(返回的 int 类型值代表的具体修饰符 )。对照表请参考:对照表参考
还没有评论,来说两句吧...