代码拉取完成,页面将自动刷新
我们在实际开发的过程中,需要将几个Javabean对象,糅合成一个json对象,返回给前台,这时,就需要过滤数据。 我们使用的commons-beanutils这个框架,于是,自己看了源码后,仿写了这个框架。于是,把这个框架贡献出来, 供大家学习使用。详细介绍,请参考我的博客:https://segmentfault.com/write?draftId=1220000018204853
clazz = bean.getClass();
if (props.indexOf(".") != -1) {
methodName = MethodHelper.propsToGetMethod(props.substring(0, props.indexOf(".")));
Method method = clazz.getDeclaredMethod(methodName);
Object obj = method.invoke(bean);
return getProperty(obj, props.substring(props.indexOf(".") + 1));
}
Field field = clazz.getDeclaredField(props);
typeName = field.getType().getName();
if (typeName.equalsIgnoreCase("boolean")) {
field.setAccessible(true);
return field.getBoolean(bean);
}
methodName = MethodHelper.propsToGetMethod(props);
Method method = clazz.getDeclaredMethod(methodName);
return method.invoke(bean);
/**
* Created By zby on 9:40 2019/2/13
* 模拟框架中的数据
*
* @param object 参数对象
* @param props String类型的变长数组,比如{"id:projectId", "mobile",...}
* 前半部分是javabean的属性名,后半部分是返回到给客户端的参数名
*/
public static JSONObject propsFilter(Object object, String... props) {
//【1】判断对象和变长数组的是否为空,以及变长数组的长度是否为0
boolean isNull = object == null || (null == props && props.length == 0);
if (isNull) {
logger.warn("参数为空object=" + object + "props=" + props);
return null;
}
JSONObject jsonObject = new JSONObject();
for (String prop : props) {
//【2】再判断对象不为空,或者长度不为0
if (prop == null && prop.length() == 0) {
logger.warn("参数为空prop= " + prop);
throw new RuntimeException("参数为空prop=" + prop);
}
Object o = null;
String[] namePair = StringUtils.split(prop, ":");
try {
o = PropertyUtil.getProperty(object, namePair[0]);
} catch (Exception e) {
logger.warn("类" + object.getClass() + ",属性" + namePair[0] + "不存在");
}
String key = namePair.length <= 1 ? namePair[0] : namePair[1];
if (o instanceof Date)
jsonObject.put(key, DateUtil.simpleFormate((Date) o));
else if (o instanceof BigDecimal)
jsonObject.put(key, CommonUtil.toFiexd((BigDecimal) o, 2));
else if (o instanceof TitleEnum)
jsonObject.put(key, CommonUtil.builderEnum((TitleEnum) o));
else
jsonObject.put(key, o);
}
return jsonObject;
}
该项目是基于idea的Java语言开发的框架,所有,确保电脑已经安装了idea和jdk等。
@Test
public void test(){
Address address = new Address();
address.setAddressTag(AddressTagEnum.ADDRESS_TAG_COMPANY);
address.setArea("杭州市....");
address.setConsignee("zby");
User user = new User();
user.setHobby(HobbyEnum.HOBBY_DANCING);
user.setGender("男");
user.setUserName("蒋三");
OrderSnapshot orderSnapshot = new OrderSnapshot();
orderSnapshot.setAddress(address);
orderSnapshot.setId(1L);
orderSnapshot.setName("复读机");
orderSnapshot.setOrderNo(Long.valueOf(System.currentTimeMillis()).toString() + "1L");
orderSnapshot.setUser(user);
String[] json = {"address.consignee:consignee","user.hobby:hobby","address.addressTag:addressTag",
"address.area:area","address.consignee:consignee","user.userName:userName"};
System.out.println(JsonUtil.propsFilter(orderSnapshot, json));
}
结果是:
{
"area":"杭州市....",
"consignee":"zby",
"addressTag":{
"value":"公司",
"key":"ADDRESS_TAG_COMPANY"
},
"userName":"蒋三",
"hobby":{
"value":"跳舞",
"key":"HOBBY_DANCING"
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。