实体类如何"不费力气"的转为Map
初衷:
db返回了一个实体类,想封装成一个Map留着按需获取属性,所以就有了下面的Utils
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*; /**
* @program: ht
* @description: 实体类存入Map
* @author: Wangly
* @create: 2020-12-29 13:29
* @version: 1.0.0
*/
public class BeanMap {
/**
* 获取obj中的所有方法
*
* @param obj
* @return
*/
public List<Method> getAllMethods(Object obj) {
List<Method> methods = new ArrayList<Method>();
// 获取obj字节码
Class<?> clazz = obj.getClass();
while (!clazz.getName().equals("java.lang.Object"))
{
// 获取方法
methods.addAll(Arrays.asList(clazz.getDeclaredMethods()));
clazz = clazz.getSuperclass();
}
return methods;
} /**
* 将一个类用属性名为Key,值为Value的方式存入map
*
* @param obj
* @return
*/
public Map<String, Object> convert2Map(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
List<Method> methods = getAllMethods(obj);
for (Method m : methods) {
String methodName = m.getName();
if (methodName.startsWith("get")) {
// 获取属性名
String propertyName = methodName.substring(3);
try {
map.put(propertyName, m.invoke(obj));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return map;
}
}
Test
测试实体类
import lombok.Data; /**
* @program: ht
* @description: TestBeanMap
* @author: Wangly
* @create: 2020-12-29 13:37
* @version: 1.0.0
*/
@Data
public class Person {
private int id;
private String name;
private String nipples;
private String sw;
private String bra;
private String foot;
private String mouth; public Person() {} public Person(int id, String name, String nipples, String sw, String bra, String foot, String mouth) {
this.id = id;
this.name = name;
this.nipples = nipples;
this.sw = sw;
this.bra = bra;
this.foot = foot;
this.mouth = mouth;
}
}
测试类
@Test
public void BeanMapTest() {
BeanMap beanMap = new BeanMap();
Person p = new Person();
p.setId(1);
p.setBra("pink");
p.setMouth("good");
p.setNipples("pink");
p.setSw("black");
p.setFoot("good"); Map<String, Object> stringObjectMap = beanMap.convert2Map(p);
stringObjectMap.forEach((k, v) -> {
System.out.println("k:" + k + ",v:" + v);
});
}
输出

发现多少沾点多此一举 避免重复造轮子
// 将 Map 转换为 实体类
Person person = JSON.parseObject(JSON.toJSONString(personMap), person.class);
System.out.println(user);
// 将 实体类 转换为 Map
Map map = JSON.parseObject(JSON.toJSONString(person), Map.class);
System.out.println(map);
实体类如何"不费力气"的转为Map的更多相关文章
- Android--将实体类转化成Json和Map的基类
package com.newair.talk.base; import android.text.TextUtils; import com.google.gson.Gson; import jav ...
- javabean实体类对象转为Map类型对象的方法(转发)
//将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...
- javabean(实体类)转Map类型
javabean(实体类)转Map类型 从网上"風亦飞"的导出EXCEL的源代码提取出来的.认为非常好用.分享一下给大家,主要看beanToMap方法就OK了 /*以下是从poi导 ...
- oracle学习笔记(八)——结果集元数据ResultSetMetaData以及ResultSet转为对应的实体类框架
介绍 可用于获取关于 ResultSet 对象中列的类型和属性信息的对象,在持久框层框架(如:mybatis, hibernate)中被广泛的应用. 常用方法 int getColumnCount() ...
- SpringBoot中Redis的set、map、list、value、实体类等基本操作介绍
今天给大家介绍一下SpringBoot中Redis的set.map.list.value等基本操作的具体使用方法 上一节中给大家介绍了如何在SpringBoot中搭建Redis缓存数据库,这一节就针对 ...
- JAVA 中 Map 与实体类相互转换的简单方法
1. 在 pom.xml 中引入依赖包 <dependency> <groupId>com.alibaba</groupId> <artifactId> ...
- java实体类和json串字段名称不一致或者与map中字段名称不一致使用注解转化
package yuanCheng; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List ...
- JAVA 实体类List<Entity >转 List<Map>
public static <T extends IdEntity> List<Map<Object,Object>> EntityConvertMap(List& ...
- .Net Core NPOI读取Excel 并转为数据实体类
创建应用程序 这里直接创建Console程序 引用NPOI的NuGet包 PM> Install-Package NPOI -Version 2.5.1 直接Nuget包管理器添加 导入Exce ...
- PhoneBean实体类的封装和map输出键值对的设置
之前我们写好了bean类型.现在我们再看看这个需求中,map和reduce各自的流程. Map阶段: 字段切分以后保留如下字段:以第一行为例,就保留13726230503112 2481 24681 ...
随机推荐
- 高通lk阶段mipi 代码解析以及新屏幕添加
参考:https://www.cnblogs.com/linhaostudy/p/9237526.html 背景 前段时间做了这块的工作,但总结完以后领导说我的认识还是过于肤浅,因此重新再看了一下. ...
- Ubuntu中安装最新 Node.js 和 npm
背景 为了安装GNU QEMU Eclipse,需要安装比较新的nodejs $ npm install --global xpm@latest ▌ ╢░░░░░░░░░░░░░░░░░░░░░░░░ ...
- 请解释一下 JavaScript 的同源策略?
概念:同源策略是客户端脚本(尤其是Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载.这里的同源策略指的是: 协议,域名,端口 相同,同源策略是一种安全协议.指一 ...
- mysql 二进制的读取与写入
插入语句 用binary转换函数可将字符串转为二进制 insert into mytable (id, bin) values(1, binary('abcdef')) 查询语句 用cast进行类型转 ...
- 面试官:Java对象引用都有哪些类型?
哈喽,大家好,我是世杰. 本文我为大家介绍面试官经常考察的「Java对象引用相关内容」 照例在开头留一些面试考察内容~~ 面试连环call Java对象引用都有哪些类型? Java参数传递是值传递还是 ...
- C#——接口
先来看看微软官方对接口的定义与说明. 接口定义协定. 实现接口的类或结构必须遵循它的协定. 接口可以从多个基接口继承,类或结构可以实现多个接口. 接口可以包含方法.属性.事件和索引器. 接口本身不提供 ...
- 用户数据报协议UDP
UDP的首部格式如下: (1) 源端口,源端口号.在需要对方回信时选用.不需要时可用全0. ⑵目的端口,目的端口号.这在终点交付报文时必须使用. ⑶长度,UDP用户数据报的长度,其最小值是8(仅有首部 ...
- API网关实践-网易云轻舟微服务
微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布.管理.保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之 ...
- AT_agc017_b 题解
洛谷链接&Atcoder 链接 本篇题解为此题较简单做法,请放心阅读. 题目简述 一共有 \(n\) 个格子,给定两个整数 \(A,B\) 分别位于第 \(1\) 和第 \(n\) 格,中间有 ...
- Prometheus 使用Python推送指标数据到Pushgateway
使用Python推送指标数据到Pushgateway 需求描述 实践环境 Python 3.6.5 Django 3.0.6 prometheus-client 0.11.0 代码实现 !/usr/b ...