修正Dorado实体的autoCreatePropertyDefs属性设置为真时,PropertyUtils产生的BUG

Dorado使用PropertyUtils来获取实体属性,但是会将一些与非实体属性的Get/Set方法也判断为属性,如Menu实体有isRoot及isLeaf两个方法,Dorado会生成root与leaf两个属性,而真实的实体中并没有这两个属性。为了解决这个问题,需要新建一个MyDefaultEntityDataType类并覆盖EntityDataTypeSupport类中的doCreatePropertyDefinitons方法:

public class MyDefaultEntityDataType extends EntityDataTypeSupport {

	@Override
	protected void doCreatePropertyDefinitons() throws Exception {
		Class<?> type = getMatchType();
		if (type == null) {
			type = getCreationType();
		}
		if (type == null || type.isPrimitive() || type.isArray()
				|| Map.class.isAssignableFrom(type)) {
			return;
		}
		
		/* 获取类的所有真实属性Map */
		Map<String, Field> fields = ReflectUtils.getFields(type);
		PropertyDescriptor[] propertyDescriptors = PropertyUtils.getPropertyDescriptors(type);
		for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
			String name = propertyDescriptor.getName();
			
			/* 判断Property是否存在实际的Field字段,如果不存在则忽略之 */
			if (!fields.containsKey(name))
				continue;
			
			if (!BeanPropertyUtils.isValidProperty(type, name))
				continue;

			... ...
		}
	}
}

在定义实体的超类AbstractEntity(其他Dorado实体都继承该类)时,将其impl属性设置为xxx.xxx.MyDefaultEntityDataType即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值