龙空技术网

利用Java反射机制进行Map和JavaBean间转换

双主双机热备 242

前言:

如今姐妹们对“java反射方法入参为map”大体比较讲究,同学们都想要分析一些“java反射方法入参为map”的相关资讯。那么小编同时在网络上搜集了一些有关“java反射方法入参为map””的相关知识,希望姐妹们能喜欢,兄弟们一起来学习一下吧!

Java中利用反射进行Map和JavaBean间转换

在日常工作中,有时候我们可能会遇到以下这样的情况发生。

例如:

(1)后端接受一个参数Map<String,Object> param(可能是前端form维护的一个对象...)。

(2)将一个对象个别属性(key)和对应值(value)存放到Map对象中。

(3).......

针对上面情况:

1、对于对象属性较少时还是比较方便操作,可以手动写入解决。

2、如果是属性特别多(几十、甚至上百个字段),用到的地方也特别多时,再手动写的话就有点繁琐。

这里给大家推荐一个方法:

利用反射进行Map和JavaBean间转换

案例:

(1)下面是一个比较常见JavaBean。

以Student为例,属性、构造器、set/get、toString......

(2) 工具类MapAndJavaBeanUtil

方法:将Map转化为JavaBean

主要利用java反射的机制(此篇不针对反射)。

Field类:封装了对象属性信息。

//获取对象的属性fields数组

Field[] fields = obj.getClass().getDeclaredFields();

//设置对象属性名 属性值

field.set(obj, map.get(field.getName()));

(3) 方法:将Object转化为Map

与(2)同理。

(4) 测试

如果大家还有其他方法欢迎评论留言,共同进步,感谢支持。

源码贴在下面或者大家可以私信留言。

MapAndJavaBeanUtil 工具类

package util;

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

import java.util.HashMap;

import java.util.Map;

public class MapAndJavaBeanUtil {

/**

* 将map转化为JavaBean

* @param map

* @param clazz

* @return

*/

public static Object mapToObject(Map<String,Object> map,Class<?> clazz) {

if(map == null) return null;

Object obj = null;

try {

obj = clazz.newInstance();

Field[] fields = obj.getClass().getDeclaredFields();

for (Field field : fields) {

int mod = field.getModifiers();

if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {

continue;

}

field.setAccessible(true);

//设置对象的属性名 属性值

field.set(obj, map.get(field.getName()));

}

} catch (Exception e) {

e.printStackTrace();

}

return obj;

}

/**

* 将object转化为map

* @param obj

* @return

*/

public static Map<String,Object> ObjectToMap(Object obj) {

if(obj == null)return null;

Map<String, Object> map = new HashMap<>();

Class clazz = obj.getClass();

Field[] fields = clazz.getDeclaredFields();

try {

for (Field field : fields) {

//破坏封装(private)

field.setAccessible(true);

//属性名 属性值

map.put(field.getName(), field.get(obj));

}

} catch (Exception e) {

e.printStackTrace();

}

return map;

}

}

Student实体类

package entity;

import java.util.Date;

public class Student {

private String pkid;

private Integer sno;

private String sname;

private Date date;

public Student() {}

public Student(String pkid, Integer sno, String sname, Date date) {

super();

this.pkid = pkid;

this.sno = sno;

this.sname = sname;

this.date = date;

}

public String getPkid() {

return pkid;

}

public void setPkid(String pkid) {

this.pkid = pkid;

}

public Integer getSno() {

return sno;

}

public void setSno(Integer sno) {

this.sno = sno;

}

public String getSname() {

return sname;

}

public void setSname(String sname) {

this.sname = sname;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

@Override

public String toString() {

return "Student [pkid=" + pkid + ", sno=" + sno + ", sname=" + sname + ", date=" + date + "]";

}

}

Demo测试类

package test;

import java.util.Date;

import java.util.Map;

import entity.Student;

import util.MapAndJavaBeanUtil;

public class Demo1 {

public static void main(String[] args) {

Student stu = new Student();

stu.setPkid("274DA9A4C02D4654870FF5311E5154FF");

stu.setSname("odysee");

stu.setSno(new Integer(20144550));

stu.setDate(new Date());

//student --> map

Map<String,Object> result = MapAndJavaBeanUtil.ObjectToMap(stu);

System.out.println("student --> map:"+result);

//map --> student

Object obj = MapAndJavaBeanUtil.mapToObject(result, Student.class);

Student stuResult = (Student) obj;

System.out.println("map --> student:"+stuResult.toString());

}

}

标签: #java反射方法入参为map