转换实体类_利用Java反射机制进行Map和JavaBean间转换

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

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

例如:

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

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

(3).......

针对上面情况:

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

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

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

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

案例:

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

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

a70214e896969d3a02d670c37eea7781.png

(2) 工具类MapAndJavaBeanUtil

方法:将Map转化为JavaBean

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

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

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

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

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

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

7344dbe5cd33a425830fcc07f5e38163.png

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

与(2)同理。

4eebe1a7e470464062a65a6e71a17d30.png

(4) 测试

1cdcf567275060bce334bb620b1bb85c.png

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

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

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 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 ObjectToMap(Object obj) {

if(obj == null)return null;

Map 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 +

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值