Map转对象工具类

ゝ一世哀愁。 2022-04-15 04:28 677阅读 0赞

Map转自定义Object–自定义工具类

在 springmvc 框架中:

参数接收–到封装进自定义实体类是可以借助框架自动完成的

但是如果我们没有使用框架,或者某些特定代码,或者并不在控制层中。此情况下我们也许无法使用借助 springmvc 提供好的注解或者代码工具。

此工具类是将不确定的 Map 对象转换封装进实体

Map – 自定义实体类
工具类如下:

  1. import java.lang.reflect.Field;
  2. import java.lang.reflect.Modifier;
  3. import java.util.Map;
  4. /**
  5. *
  6. * 〈map 转 自定义实体类 自定义工具类〉
  7. * @author Zy0116
  8. * @create 2018/11/16
  9. * @since 1.0.0
  10. */
  11. public class Map2ObjectUtil {
  12. public static Object map2Object(Map<String, Object> map, Class<?> clazz) {
  13. if (map == null) {
  14. return null;
  15. }
  16. Object obj = null;
  17. try {
  18. obj = clazz.newInstance();
  19. // 获取自定义clazz类的全部字段
  20. Field[] fields = obj.getClass().getDeclaredFields();
  21. for (Field field : fields) {
  22. // 获取字段修饰符 需要排除静态及final修饰的字段
  23. int mod = field.getModifiers();
  24. if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
  25. continue;
  26. }
  27. // 强制设置为 true 即可以对字段值进行设置 防止一些方法阻碍我们对属性进行赋值
  28. field.setAccessible(true);
  29. // map 中如果包含字段名称的 key 则将对应的值放入 clazz 对象对应的字段上
  30. if (map.containsKey(field.getName())){
  31. field.set(obj, map.get(field.getName()));
  32. }
  33. }
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. return obj;
  38. }
  39. }

说明几点:

  1. 之所以使用的是反射中 getDeclaredFields() 方法来获取全部字段
  2. 是因为我们不仅需要 public 修饰的成员,同样需要private等其它修饰符修饰的字段至于 static 静态修饰的,我们可以将它理解为常量(即从有它开始 就已经是固定不变的)。
  3. 关于 getModifiers() 方法,可能我们并不常用,此方法是获取调用字段在类中的修饰符,我们可以以此来判断如果处理字段。(返回的 int 类型值代表的具体修饰符 )。对照表请参考:对照表参考
OK,如果有同样需求的朋友可能直接使用此工具类来进行转换,方便些。

发表评论

表情:
评论列表 (有 0 条评论,677人围观)

还没有评论,来说两句吧...

相关阅读