java实体类转成map的实现
作者:南大白 发布时间:2022-03-25 08:56:04
标签:java,实体类,map
java实体类转成map
1.第一种
<!-- 配置gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
Map<String, Object> map = null;
String jsonString = JSONUtil.toJsonStr(uploadBaseEntity);
Gson gson = new Gson();
map = new HashMap<>();
map = gson.fromJson(jsonString, map.getClass());
2.第二种
/**
* 对象转化为Map
*
* @param obj
* @return
* @throws Exception
*/
public static Map<String, String> objectToMap01(Object obj) throws Exception {
if (obj == null) {
return null;
}
Map<String, String> map = new HashMap<String, String>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), (String) field.get(obj));
}
return map;
}
java实体类与map集合互转
废话不说,直接上代码!留着用吧...
package com.ddm.message.test;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Java实体类与Map互转
* @author Administrator
*
*/
public class entityMapTransUtils {
private static final Logger logger = LoggerFactory.getLogger(entityMapTransUtils.class);
/**
* Java实体类转Map:方法一
* @param obj
* @return
*/
public static Map<String, Object> entityToMap1(Object obj){
Map<String, Object> map = new HashMap<String, Object>();
Class<?> clazz = obj.getClass();
for(Field field : clazz.getDeclaredFields()){
field.setAccessible(true);
String fieldName = field.getName();
Object object = null;
try {
object = field.get(obj);
} catch (IllegalArgumentException | IllegalAccessException e) {
logger.info(e.getMessage());
}
map.put(fieldName, object);
}
return map;
}
/**
* Java实体类转Map:方法二
* @param obj
* @return
*/
public static Map<String, Object> entityToMap2(Object obj){
Map<String, Object> map = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
// 过滤class属性
if (!key.equals("class")) {
// 得到property对应的getter方法
Method getter = property.getReadMethod();
Object value = getter.invoke(obj);
map.put(key, value);
}
}
} catch (Exception e) {
logger.info(e.getMessage());
}
return map;
}
/**
* Map转实体类:要转换的Map的key跟实体类属性名相同的数据会转过去,不相同的字段会为null
* @param clazz
* @param map
* @return
*/
public static <T> T mapToEntity1(Class<T> clazz,Map<String, Object> map){
T obj = null;
try {
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
obj = clazz.newInstance(); // 创建 JavaBean 对象
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
// 给 JavaBean 对象的属性赋值
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (map.containsKey(propertyName)) {
Object value = map.get(propertyName);
Object[] args = new Object[1];
args[0] = value;
try {
descriptor.getWriteMethod().invoke(obj, args);
} catch (InvocationTargetException e) {
logger.info(e.getMessage());
}
}
}
} catch (IllegalAccessException e) {
logger.info(e.getMessage());
} catch (IntrospectionException e) {
logger.info(e.getMessage());
} catch (IllegalArgumentException e) {
logger.info(e.getMessage());
} catch (InstantiationException e) {
logger.info(e.getMessage());
}
return (T)obj;
}
}
来源:https://blog.csdn.net/qq_39069718/article/details/124122320
0
投稿
猜你喜欢
- 1.漏洞描述Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API
- 前言:这个语句的作用是,确保该语句执行之后,关闭每一个资源,也就是说它确保了每个资源都在生命周期结束之后被关闭,因此,比如读写文
- PipedOutputStream和PipedInputStream在java中,PipedOutputStream和PipedInputS
- synchronized关键字synchronized,我们谓之锁,主要用来给方法、代码块加锁。当某个方法或者代码块使用synchroniz
- 本文介绍了最好的Java5种遍历HashMap数据的写法,分享给大家,也给自己留一个笔记,具体如下:通过EntrySet的迭代器遍历Iter
- 现象在日志配置文件 logback-spring.xml 中,无论怎么修改级别,mybatis 的 sql 日志都会打印出来。原因在 app
- 本篇概览在检测人脸数量、位置、性别、口罩等场景时,可以考虑使用百度开放平台提供的web接口,一个web请求就能完成检测得到结果,本篇记录了从
- JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现。获取文件MD5值主要分为
- 本文实例讲述了java实现新浪微博Oauth接口发送图片和文字的方法。分享给大家供大家参考。具体如下:基于网上很多人利用新浪api开发新浪微
- 前言代码库:https://gitee.com/leo825/springboot-learning-parents.git之前写过《Spr
- 需求最近小编的项目中出现了很多feign 调用出现 Read Time out 的异常,但因为没有集成链路追踪的第三方框架,查不到原因。所以
- iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下:#import <CoreLo
- 概述在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条
- 前言开发中,免不了会用到多边形、多角星等图案,比较常用的多边形比如雷达图、多角星比如评价星级的五角星等,本篇文章就使用Flutter绘制封装
- Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制
- 背景SpringBoot的应用监控方案比较多,SpringBoot+Prometheus+Grafana是目前比较常用的方案之一。它们三者之
- 前言公司的邮件系统用的是 * 的 Lotus notes, 你敢信?最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前
- Android指定SnackBar在屏幕的位置Snackbar 常以一个小的弹出框的形式,出现在手机屏幕下方或者桌面左下方,并且是在屏幕所有
- 1. 遍历map方法通过 keySet() 方法获取全部的key值;通过 values() 方法获取全部的value值;通过遍历key值获取
- Java是一门面向对象的语言,即一切皆是对象!那么为何数据类型中还分为:基本类型和对象?Java中有8种基本数据类型boolean、byte