实体类如何"不费力气"的转为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 ...
随机推荐
- Sqlite windows11 安装与使用
首先进入Sqlite官方网址: https://www.sqlite.org/download.html 然后下载下面框起来的两个压缩文件 下载完成后解压 接下来去配置环境变量,右键此电脑->属 ...
- 从github下好dirsearch后出现要下载文件依赖错误
pip3 install -r requirements.txt
- Java解析微信获取手机号信息
在微信中,用户手机号的获取通常是通过微信小程序的getPhoneNumber接口来实现的.这个接口允许用户在授权后,将加密的手机号数据传递给开发者.由于隐私保护,微信不会直接提供用户的明文手机号,而是 ...
- Mysql 使用(一)
一.数据库的种类 关系型数据库 非关系型数据库 二.常见关系型数据库 oracle:在以前的大型项目中使用,银行,电信等项目 mysql:web时代使用最广泛的关系型数据库 ms sql server ...
- 机器学习(四)——Lasso线性回归预测构建分类模型(matlab)
Lasso线性回归(Least Absolute Shrinkage and Selection Operator)是一种能够进行特征选择和正则化的线性回归方法.其重要的思想是L1正则化:其基本原理为 ...
- Centos7搭建Minio环境(配置开机自启)
Minio 添加环境变量 # 设置控制台账号 最少3位 export MINIO_ACCESS_KEY=admin # 设置密码 最少8位 export MINIO_SECRET_KEY=123456 ...
- 妙趣横生:利用Echarts实现SpreadJS引用从属关系的可视化魅力
最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 在金融行业,我们经常会有审计审查的需求,对某个计算结果进行审查,但是这个计算结果可能依赖多个单 ...
- 解决方案 | 一个VBA代码里面非常隐蔽的错误:运行时错误“5”:无效的过程调用或参数
1 代码部分 代码功能:实现使用sumatra打开指定pdf指定页码 代码: Sub OpenPDFatPage() Dim PDFFile As String Dim PageNumber As L ...
- webpack4.15.1 学习笔记(五) — 生产环境构建
目录 生产环境构建 指定环境 生产环境构建 development和production的构建目标差异很大.dev中,需要具有实时重新加载或HMR能力的 source map 和 server.而在p ...
- 对比`Pinia `和` Vuex`,全面了解` Vue`状态管理
Pinia和Vuex一样都是是vue的全局状态管理器.其实Pinia就是Vuex5,只不过为了尊重原作者的贡献就沿用了这个看起来很甜的名字Pinia. 本文将通过Vue3的形式对两者的不同实现方式进行 ...