工具类
package com.sunwe.emview.util;
import com.google.common.collect.Maps;
import org.apache.commons.beanutils.PropertyUtilsBean;
import java.beans.PropertyDescriptor;
import java.util.Date;
import java.util.Map;
public class ReflectUtil {
public static Object getObject(Object dest, Map<String, Object> addProperties) {
PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean();
PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors(dest);
Map<String, Class> propertyMap = Maps.newHashMap();
for (PropertyDescriptor d : descriptors) {
if (!"class".equalsIgnoreCase(d.getName())) {
propertyMap.put(d.getName(), d.getPropertyType());
}
}
addProperties.forEach((k, v) -> {
String sclass = v.getClass().toString();
if(sclass.equals("class java.util.Date")) {//对日期进行处理
propertyMap.put(k, Long.class);
}else {
propertyMap.put(k, v.getClass());
}
});
DynamincBean dynamicBean = new DynamincBean(dest.getClass(), propertyMap);
propertyMap.forEach((k, v) -> {
try {
if (!addProperties.containsKey(k)) {
dynamicBean.setValue(k, propertyUtilsBean.getNestedProperty(dest, k));
}
} catch (Exception e) {
}
});
addProperties.forEach((k, v) -> {
try {
String sclass = v.getClass().toString();
if(sclass.equals("class java.util.Date")) {//动态添加的字段为date类型需要进行处理
Date date = (Date) v;
dynamicBean.setValue(k, date.getTime());
}else {
dynamicBean.setValue(k, v);
}
} catch (Exception e) {
}
});
Object obj = dynamicBean.getTarget();
return obj;
}
}
import org.springframework.cglib.beans.BeanGenerator;
import org.springframework.cglib.beans.BeanMap;
import java.util.Map;
public class DynamincBean {
private Object target;
private BeanMap beanMap;
public DynamincBean(Class superclass, Map<String, Class> propertyMap) {
this.target = generateBean(superclass, propertyMap);
this.beanMap = BeanMap.create(this.target);
}
public void setValue(String property, Object value) {
beanMap.put(property, value);
}
public Object getValue(String property) {
return beanMap.get(property);
}
public Object getTarget() {
return this.target;
}
/**
* 根据属性生成对象
*
*/
private Object generateBean(Class superclass, Map<String, Class> propertyMap) {
BeanGenerator generator = new BeanGenerator();
if (null != superclass) {
generator.setSuperclass(superclass);
}
BeanGenerator.addProperties(generator, propertyMap);
return generator.create();
}
}
实际应用
public Page<HisAirboxData> findItemModelPageByParamsn(Map<String, Object> params) {
Object endDate = params.get(SysConstant.END_DATE);
if (endDate!=null&& StringUtils.isNotBlank(endDate.toString())){
params.put(SysConstant.END_DATE,endDate.toString().substring(0,10)+ SysConstant.ONE_DAY_LAST_SECONDS) ;
}
long count = getMapper().countHisItemModelDataByParams(params);
List<HisAirboxData> list = getMapper().findHisItemModelDataByParamsn(params);
List<Object> listn = new ArrayList<>();
//[{"name":"冷冻水水温传感器2","value":"23.6℃"},{"name":"热水回水水温传感器1","value":"23.7℃"},{"name":"热水回水水温传感器2","value":"23.8℃"},{"name":"多联机水温传感器1","value":"23.9℃"},{"name":"多联机水温传感器2","value":"24.0℃"},{"name":"蒸发冷凝器进风温度","value":"24.1℃"},{"name":"蒸发冷凝器排风温度","value":"24.2℃"},{"name":"蒸发冷凝器水箱温度","value":"24.3℃"},{"name":"压缩机排气温度","value":"24.4℃"},{"name":"压缩机冷凝压力1","value":"24.5BAR"},{"name":"压缩机冷凝压力2","value":"24.6BAR"},{"name":"加热1输出","value":"24.7%"},{"name":"加热2输出","value":"24.8%"},{"name":"Y3输出","value":"24.9%"},{"name":"Y4输出","value":"25.0%"},{"name":"制冷温度设定","value":"25.1℃"},{"name":"制热温度设定","value":"25.2℃"},{"name":"加湿湿度设定","value":"25.3%"},{"name":"除湿湿度设定","value":"25.4%"}]
list.forEach(l ->{
HisAirboxData hisAirboxData = new HisAirboxData();
List<JSONObject> lists = JSONObject.parseArray(l.getExtendData(),JSONObject.class);
//将List<JSONObject>转为Map
Map<String, Object> map = lists.stream()
.filter(Objects::nonNull)
.collect(Collectors.toMap(item -> item.getString("name"), item -> item.getString("value")));
//根据字段动态生成类
Object obj = ReflectUtil.getObject(l, map);
listn.add(obj);
});
return PageHelper.buildPagen(params, count, listn);
}