body:{
String A:"123";
String B:"123";
Asset asset:{//此时Asset 有一个父类AssetParent
String M:"123";
String N:"123";
------- 以下父类属性--------
String X:"123";
Stirng Y:"123"
}
List<Asset> list:{
asset:{//此时Asset 有一个父类AssetParent
String M:"123";
String N:"123";
------- 以下父类属性--------
String X:"123";
Stirng Y:"123"
}
}
}
AssetParent assetParent:{
String X:"123";
Stirng Y:"123"
}
public void onField(Object body){
Class<?> objTarget = body.getClass().getSuperclass();
1.getType() :获取字段的Type类型
2.getName()//获取字段名
3.getDeclaringClass() :会返回最初声明该字段的父类class:假设有一个类A,它定义了一个内部类B,那么在类B中调用getClass().getDeclaringClass(),将会返回A类的Class对象。而在类A中怎么获得内部类B的父类属性getSuperclass()方法获取内部类B的父类属性。由于内部类B是继承自类A的,因此返回的父类属性是A
4.getGenericType() : 返回属性声明的Type类型;如属性是泛型,返回泛型的参数类型,无签名属性返回 Field.getType()
Field field = objTarget.getDeclaredField("asset");//获取body下asset对象
5.field.setAccessible(true);//对象属性为私有,属性变更为public
6.field.get(body);//获取asset数据
7.field.getType()//获取到当前类asset属性
8.field.getDeclaringClass()//获取到当前类asset属性以及父类属性AssetParent
Field objTarget = field.getType().getDeclaredField("M");//获取属性M
Field objTarget = field.getDeclaringClass().getDeclaredField("X");//获取属性X
9.objTarget.set(body,"123");//给获取的属性赋新值
//对list结构序列化操作
Field dataField = body.getClass().getSuperclass().getDeclaredField("data"); dataField.setAccessible(true); list = (List<Class<?>>) dataField.get(body);
if(!ObjectUtils.isEmpty(list)){ for(int i=0;i<list.size();i++){ log.info("************obj******:{}",JSONObject.toJSONString(list.get(i))); Object o = list.get(i); Class<?> objTarget = o.getClass().getSuperclass(); for (String fieldName:dtoFidle) { Field fieldObj = objTarget.getDeclaredField(fieldName); fieldObj.setAccessible(true); if(!ObjectUtils.isEmpty(fieldObj.get(list.get(i)))){ fieldObj.set(o, "value"); } } } }
//不确定子类属性还是父类属性
Class<?> o = obj.getClass().getSuperclass();
Field element = null; try{ element = o.getDeclaredField(key); element.setAccessible(true); }catch (Exception e) { o = obj.getClass(); element = o.getDeclaredField(key); element.setAccessible(true); } log.info("key**********:{},************value:{}",key,element.get(obj)); if(!ObjectUtils.isEmpty(element.get(obj))){ element.set(obj, ""); }
//取数据一级一级取然后填充
Object o = field.get(body); Field creditPromiseDetailDto = o.getClass().getDeclaredField("custCompanyDto"); creditPromiseDetailDto.setAccessible(true); exeChange(custCompanyDto,o,body);//element.set(obj, encrpy); 填充 //----------- Object o_next = creditPromiseDetailDto.get(o); Field authUser = o_next.getClass().getDeclaredField("authUser"); authUser.setAccessible(true); //authUser element.set(obj, encrpy); 填充 Field legalPerson = o_next.getClass().getDeclaredField("legalPerson"); legalPerson.setAccessible(true); //legalPerson element.set(obj, encrpy); 填充