/**
* 用于对Object进行解析并且转换成Map键值对的形式
*
*/
public class ObjectUtils { private static final String JAVAP = "java.";
private static final String JAVADATESTR = "java.util.Date"; /**
* 获取利用反射获取类里面的值和名称
*
* @param obj
* @return
* @throws IllegalAccessException
*/
public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
Map<String, Object> map = new HashMap<>();
Class<?> clazz = obj.getClass();
System.out.println(clazz);
for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
String fieldName = field.getName();
Object value = field.get(obj);
map.put(fieldName, value);
}
return map;
} /**
* 利用递归调用将Object中的值全部进行获取
*
* @param timeFormatStr 格式化时间字符串默认<strong>2017-03-10 10:21</strong>
* @param obj 对象
* @param excludeFields 排除的属性
* @return
* @throws IllegalAccessException
*/
public static Map<String, String> objectToMapString(String timeFormatStr, Object obj, String... excludeFields) throws IllegalAccessException {
Map<String, String> map = new HashMap<>(); if (excludeFields.length!=0){
List<String> list = Arrays.asList(excludeFields);
objectTransfer(timeFormatStr, obj, map, list);
}else{
objectTransfer(timeFormatStr, obj, map,null);
}
return map;
} /**
* 递归调用函数
*
* @param obj 对象
* @param map map
* @param excludeFields 对应参数
* @return
* @throws IllegalAccessException
*/
private static Map<String, String> objectTransfer(String timeFormatStr, Object obj, Map<String, String> map, List<String> excludeFields) throws IllegalAccessException {
boolean isExclude=false;
//默认字符串
String formatStr = "YYYY-MM-dd HH:mm:ss";
//设置格式化字符串
if (timeFormatStr != null && !timeFormatStr.isEmpty()) {
formatStr = timeFormatStr;
}
if (excludeFields!=null){
isExclude=true;
}
Class<?> clazz = obj.getClass();
//获取值
for (Field field : clazz.getDeclaredFields()) {
String fieldName = clazz.getSimpleName() + "." + field.getName();
//判断是不是需要跳过某个属性
if (isExclude&&excludeFields.contains(fieldName)){
continue;
}
//设置属性可以被访问
field.setAccessible(true);
Object value = field.get(obj);
Class<?> valueClass = value.getClass();
if (valueClass.isPrimitive()) {
map.put(fieldName, value.toString()); } else if (valueClass.getName().contains(JAVAP)) {//判断是不是基本类型
if (valueClass.getName().equals(JAVADATESTR)) {
//格式化Date类型
SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
Date date = (Date) value;
String dataStr = sdf.format(date);
map.put(fieldName, dataStr);
} else {
map.put(fieldName, value.toString());
}
} else {
objectTransfer(timeFormatStr, value, map,excludeFields);
}
}
return map;
}

  

java 对象转Map方法Demo的更多相关文章

  1. 两种计算Java对象大小的方法

    之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...

  2. java对象转map

    /** * java对象转map * @param obj * @return * @throws IllegalAccessException * @throws IllegalArgumentEx ...

  3. Java对象与Map间相互转换

    将Java对象转为一个Map,以及将map转为对应Java对象,代码如下: public class BeanMapUtil { private static ConcurrentHashMap< ...

  4. 一行代码将两个列表拼接出第三个列表(两个可迭代对象相加产生第三个可迭代对象)--map()方法

    map()方法 map(func, *iterables) --> map object lambda方法: lambda  参数 :返回值 a = map(',7]) print(list(a ...

  5. 浅谈Java对象的equals方法

    相等与同一: 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等. 如果两个引用对象指的是同一个对象,则称这两个变量同一. ==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的 ...

  6. DozerBeanMapper + 对象转Map方法

    1.简介     dozer是一种JavaBean的映射工具,类似于apache的BeanUtils.但是dozer更强大,它可以灵活的处理复杂类型之间的映射.不但可以进行简单的属性映射.复杂的类型映 ...

  7. java对象与map对象相互转换

    /** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObject(Map<String ...

  8. 转化对象为map方法

    言语不多,直接上代码. private Map<String, Object> introspect(Object obj) throws Exception { Map<Strin ...

  9. JAVA中将对象转为Map类型

    之前讲过将Map转为JAVA对象的文章,那么问题来了,如果要把JAVA对象转为Map,又该怎么操作呢?这里亲测了2个方法可行,但目前这2个方法都是基于简单JAVA Bean的情况(即Bean中不能嵌套 ...

随机推荐

  1. 1089 Insert or Merge (25 分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  2. HDU 6574 Rng

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6574 思路:用古典概型的方法计算俩个区间不想交的概率,再用 1 减去即可. 由于 枚举俩种括号的所有可 ...

  3. linux 编译指定库、头文件的路径问题(转)

    1. 为什么会出现undefined reference to 'xxxxx'错误? 首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得 ...

  4. 关于memset赋值无穷大无穷小

    memset(a,,sizeof(a)); 即得到无穷大. memset(a,,sizeof(a)); 即得到无穷小,与上述的值互为相反数. memset(a,,sizeof(a)); 即近似为第一个 ...

  5. GetModuleHandleW 分析

    首先查询MSDN,可以清楚地看到 位于kernel32 dll 里面. 有目标就好办,找到这个dll,然后,开工,进入IDA. 跳啊 就到下面那块了. 遗憾的是...显然不是这里阿,实际上下一块调用的 ...

  6. Linux初学习之 rm 命令

    现在我们来仔细的学习一下linux的rm命令,这个命令顾名思义(我猜的,嘻嘻,是remove) 命令格式: rm [OPTION]... FILE... Remove (unlink) the FIL ...

  7. angulatJs 前端数据分页展示——例

    注:css用的是amazeui html: ···<div style="height:500px;overflow: auto;"> <table class= ...

  8. Spring对junit的整合

    Spring对junit的整合 package cn.mepu.service; import cn.mepu.config.SpringConfiguration; import cn.mepu.d ...

  9. zdump - 时区输出器

    SYNOPSIS 总览 zdump [ -v ] [ -c cutoffyear ] [ zonename ... ] 描述 Zdump 对命令行中的每一个 zonename 输出其当前时间. 提供了 ...

  10. react 使用触摸事件

    react开发支持的事件中,onClick事件,部分标签不支持点击,只能onTouchEnd,但是在移动端,手指触碰到事件绑定元素上,滑动,也会触发该事件,故来share解决办法,有更好的方法,欢迎评 ...