实际工作场景中有需要根据业务数据动态生成VO的属性并赋值,于是请教大佬写出Bean动态属性扩展器的工具类。 实例代码:
public class BeanExtFieldHelper {
public static Object populateExtField(Class<?> superClazz, Object baseObj, Map<String, String> propertyMap) {
BeanGenerator beanGenerator = new BeanGenerator();
beanGenerator.setSuperclass(superClazz);
for (Map.Entry<String, String> entry : propertyMap.entrySet()) {
beanGenerator.addProperty(entry.getKey(), entry.getValue().getClass());
}
Object obj = beanGenerator.create();
try {
org.springframework.beans.BeanUtils.copyProperties(baseObj, obj);
for (Map.Entry<String, String> entry : propertyMap.entrySet()) {
BeanUtils.setProperty(obj, entry.getKey(), entry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
public static void main(String[] args) {
UserVo vo = new UserVo();
vo.setFullName("春天的花");
vo.setMobile("138");
System.out.println("属性增加前:"+JSON.toJSONString(vo));
Map<String, String> propertyMap = new HashMap<>();
propertyMap.put("test", "888888");
UserVo o = (UserVo) populateExtField(UserVo.class, vo, propertyMap);
System.out.println("属性增加后:"+JSON.toJSONString(o));
}
参数说明:
- superClazz:返回值VO
- baseObj:基于此VO的copy属性
- propertyMap:属性名+属性值