import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.util.*;
@Slf4j
public class PojoTransformUtil {
/**
* 复制list数组
* @param list
* @param targetClass
* @param <T>
* @return
*/
public static <T> List<T> copyList(List<?> list, Class<T> targetClass) {
List<T> targetList = new ArrayList<>();
if(CollectionUtils.isEmpty(list)) {
return targetList;
}
for(Object obj : list) {
T target = copyObject(obj, targetClass);
if(target != null) {
targetList.add(target);
}
}
return targetList;
}
/**
* 复制对象
* @param obj
* @param targetClass
* @param <T>
* @return
*/
public static <T> T copyObject(Object obj, Class<T> targetClass) {
if(obj == null) {
return null;
}
T target = null;
try {
target = targetClass.newInstance();
} catch (IllegalAccessException e) {
log.error("[POJO] --- 相互转换过程出现无法实例化对象:source=" + obj.getClass().getName() + ", Target=" + targetClass.getName());
} catch (InstantiationException e) {
log.error("[POJO] --- 相互转换过程出现非法访问:source=" + obj.getClass().getName() + ", Target=" + targetClass.getName());
}
if(target != null) {
BeanUtils.copyProperties(obj, target);
}
return target;
}
/**
* 复制list数组
* @param list
* @param targetClass
* @param <T>
* @return
*/
public static <T> List<Object> transferListToObj(List<?> list, Class<T> targetClass) {
List<Object> resultObjList = new ArrayList<>(list.size());
if(CollectionUtils.isEmpty(list)) {
return resultObjList;
}
for(Object obj : list) {
T target = copyObject(obj, targetClass);
if(target != null) {
resultObjList.add(JsonMapperUtil.toJson(target));
}
}
return resultObjList;
}
/**
* 对象转map
*
* @param obj
* @return
*/
public static Map<String, Object> objToMap(Object obj, boolean isNeedSuper) {
Map<String, Object> map = new HashMap<>();
// 获取f对象对应类中的所有属性域
Field[] fields = obj.getClass().getDeclaredFields();
if (isNeedSuper){
Field[] fieldSupers = obj.getClass().getSuperclass().getDeclaredFields();
fields = (Field[]) ArrayUtils.addAll(fields, fieldSupers);
}
for (int i = 0, len = fields.length; i < len; i++) {
String varName = fields[i].getName();
try {
// 获取原来的访问控制权限
boolean accessFlag = fields[i].isAccessible();
// 修改访问控制权限
fields[i].setAccessible(true);
// 获取在对象f中属性fields[i]对应的对象中的变量
Object o = fields[i].get(obj);
if (o != null) {
map.put(varName, o);
}
// 恢复访问控制权限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException e) {
log.error("[PojoTransformUtil] --- objToMap, IllegalArgumentException", e);
} catch (IllegalAccessException e) {
log.error("[PojoTransformUtil] --- objToMap, IllegalAccessException", e);
}
}
return map;
}
/**
* 把一个字符串转换成bean对象
* @param str
* @param <T>
* @return
*/
public static <T> T stringToBean(String str, Class<T> clazz) {
if(str == null || str.length() <= 0 || clazz == null) {
return null;
}
if(clazz == int.class || clazz == Integer.class) {
return (T)Integer.valueOf(str);
}else if(clazz == String.class) {
return (T)str;
}else if(clazz == long.class || clazz == Long.class) {
return (T)Long.valueOf(str);
}else {
return JSON.toJavaObject(JSON.parseObject(str), clazz);
}
}
}
类型转换工具类
猜你喜欢
转载自blog.csdn.net/LC_Liangchao/article/details/121857848
今日推荐
周排行