需求:将实体类对象的属性名和属性值转为k-v的形式,存放到map
java代码:
public static Map<String,Object> object2Map(Object object){
Map<String,Object> result=new HashMap<>();
//获得类的的属性名 数组
Field[]fields=object.getClass().getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
String name = new String(field.getName());
result.put(name, field.get(object));
}
}catch (Exception e){
e.printStackTrace();
}
return result;
}
测试示例:
定义一个java bean:
class User{
private String name;
private String sex;
private Integer age;
public User(String name, String sex, Integer age) {
this.name = name;
this.sex = sex;
this.age = age;
}
}
做一点小小的改进,新加一个参数:String prefix,用以指定生成的key的前缀(其中的集合部分可以省略,感觉没多大意义)
/**
*@created 16:37 2018/8/1
*@author wangwei
*@params
*@return
*@todo 将实体类的 属性转为map的k-v形式
*/
public static Map<String,Object> object2Map(Object object,String prefix){
Map<String,Object> result=new HashMap<String,Object>();
//获得类的的属性名
Field[]fields=object.getClass().getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
String name = new String(field.getName());
if(!StringUtils.isEmpty(prefix)){
name=prefix+name;
}
if(! (field.get(object) instanceof List))
{
result.put(name, field.get(object));
}else{
//遍历集合对象,转为map
List list= (List) field.get(object);
int mapNumber=0;
for(Object obj:list){
Map<String,Object> tempMap=object2Map(obj,prefix);
result.put("map"+mapNumber,tempMap);
mapNumber++;
}
}
}
}catch (Exception e){
e.printStackTrace();
}
return result;
}