java map转为实体类-java map转json
Java中使用反射实现Map和JavaBean之间的转换
在日常工作中,有时我们可能会遇到以下几种情况。
例如:
(1)后端接受一个参数Map param(可能是前端表单维护的一个对象……)。
(2)在Map对象中存储一个对象的各个属性(key)和对应的值(value)。
(3).......
针对以上情况:
1.对象属性少的时候操作起来比较方便,可以通过手动写的方式解决。
2.如果属性太多(几十个甚至上百个字段),用到的地方很多,手动写会有点麻烦。
这里推荐给你一个方法:
使用反射在 Map 和 JavaBean 之间进行转换
案件:
(1) 下面是一个比较常见的JavaBean。
以Student为例,属性、构造函数、set/get、toString……
(2)工具类MapAndJavaBeanUtil
方法:将 Map 转换为 JavaBean
主要是利用了java反射的机制(本文不针对反射)。
字段类:封装了对象的属性信息。
//获取对象的属性字段数组
字段 [] 字段 = obj。 得到类()。 getDeclaredFields();
//设置对象属性名属性值
field.set(obj, map.get(field.getName()));
(3)方法:对象转Map
与(2)相同。
(4) 测试
如果大家还有其他方法,欢迎大家留言java map转为实体类,共同进步。 感谢您的支持。
源码贴在下面,也可以私信。
MapAndJavaBeanUtil 工具类
包实用程序;
导入 java.lang.reflect.Field;
导入 java.lang.reflect.Modifier;
导入 java.util.HashMap;
导入 java.util.Map;
公共类 MapAndJavaBeanUtil {
/**
* 将地图转换为 JavaBean
* @param 地图
* @param 克拉兹
* @返回
*/
public static Object mapToObject(Map map, Class clazz) {
如果(地图==空)返回空;
对象 obj = null;
尝试 {
obj = 克拉兹。 新实例();
字段 [] 字段 = obj。 得到类()。 getDeclaredFields();
对于(字段字段:字段){
int mod =字段。 getModifiers();
如果 (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
继续;
}
field.setAccessible(true);
//设置对象的属性名属性值
field.set(obj, map.get(field.getName()));
}
} 赶上(异常 e){
e.printStackTrace();
}
返回对象;
}
/**
* 将对象转换为地图
* @param 对象
* @返回
*/
public static Map ObjectToMap(Object obj) {
如果(obj == null)返回null;
映射 map = new HashMap();
类 clazz = obj。 得到类();
字段 [] 字段 = clazz。 getDeclaredFields();
尝试 {
对于(字段字段:字段){
// 打破封装(私有)
field.setAccessible(true);
// 属性名属性值
map.put(field.getName(), field.get(obj));
}
} 赶上(异常 e){
e.printStackTrace();
}
返回地图;
}
}
学生实体类
包实体;
导入java.util.Date;
公开课学生{
私有字符串 pkid;
私有整数 sno;
私有字符串名称;
私人约会日期;
公共学生(){}
public Student(String pkid, Integer sno, String sname, Date date) {
极好的();
这个.pkid = pkid;
这个.sno = sno;
this.sname = sname;
this.date = 日期;
}
公共字符串 getPkid() {
返回 pkid;
}
public void setPkid(String pkid) {
这个.pkid = pkid;
}
公共整数 getSno() {
返回斯诺;
}
public void setSno(整数 sno) {
这个.sno = sno;
}
公共字符串 getSname() {
返回名字;
}
public void setSname(String sname) {
this.sname = sname;
}
公共日期 getDate() {
归期;
}
公共无效设置日期(日期日期){
this.date = 日期;
}
@覆盖
公共字符串 toString() {
返回“学生 [pkid=" + pkid + ", sno=" + sno + ", sname=" + sname + ", date=" + date + "]";
}
}
演示测试类
包装测试;
导入java.util.Date;
导入 java.util.Map;
进口实体。 学生;
导入 util.MapAndJavaBeanUtil;
公开课 Demo1 {
public static void main(String[] args) {
学生 stu = new Student();
stu.setPkid("274DA9A4C02D4654870FF5311E5154FF");
stu.setSname("奥德赛");
stu.setSno(新整数(20144550));
stu.setDate(新日期());
//学生-->地图
映射结果 = MapAndJavaBeanUtil。 ObjectToMap(stu);
System.out.println("学生 --> 地图: "+result);
//地图——>学生
对象 obj = MapAndJavaBeanUtil. mapToObject(结果java map转为实体类,Student.class);
学生 stuResult = (Student) obj;
System.out.println("地图 --> 学生: "+stuResult.toString());
}
}