检查setter是否被调用?
问题描述:
我有写函数,我遍历HTTP查询字符串参数,并通过读取字符串设置两个POJO类属性。一些查询字符串参数属于第一类,一些属于另一类。检查setter是否被调用?
如:http://example.com?crb=nmsa&cra=jasdlka&....
我读CRB,CRA等从Map
Pojo pojo = new Pojo();
for (Map.Entry<String, List<String>> queryParameter : queryParamsAndValues.entrySet()) {
System.out.println(queryParameter.getKey() + "/" + queryParameter.getValue());
queryFieldName = QueryFieldName.getLongName(queryParameter
.getKey());
switch (queryFieldName) {
case CREATED_BEFORE:
pojo.setCreatedBefore(queryParameter.getValue()
.get(0));
System.out.println("CREATED BEFORE");
break;
case CREATED_AFTER:
pojo
.setCreatedAfter(queryParameter.getValue().get(0));
System.out.println("CREATED AFTER");
break;
case FILTER_USAGE:
pojo.setFilterUsage(new BigInteger(queryParameter
.getValue().get(0)));
System.out.println("");
break;
case RESULT_CONTENT:
pojo2.setResultContent(new BigInteger(queryParameter
.getValue().get(0)));
System.out.println("Result Content: " + new BigInteger(queryParameter.getValue().get(0)));
break;
case RESPONSE_TYPE:
ResponseTypeInfo resTypeInfo = new ResponseTypeInfo();
resTypeInfo.setResponseTypeValue(new BigInteger(queryParameter.getValue().get(0)));
pojo2.setResponseType(resTypeInfo);
default:
System.out.println("DEFUALT");
}
}
reqPrim.setPojo(pojo);
}else{
reqPrim.setPojo(null);
}
所以pojo
和pojo2
阅读查询字符串后正在设置。
现在我想知道是否设置了pojo
的任何属性。 每当设置pojo
的属性时,一个选项就是将标志设置为真。
有什么有效的方法吗?
答
方法1
你可以容纳两个地图MAP<String,Object>
的关键将是POJO的字段的名称和值是你传递什么都到现场,这样,你知道你有什么设定时,你还没有什么
Map<String,Object> pojoMap= new HashMap<>();
Map<String,Object> pojo2Map= new HashMap<>();
//when ever i set the field i put it in the map
pojo.setCreatedBefore(queryParameter.getValue().get(0));
pojoMap.put("createdBefore",queryParameter.getValue().get(0));
//you can check the field that are set
boolean isCreatedBeforeSet=(pojoMap.get("createdBefore")!=null);
方法2
你可以使用反射所以这里检查空值你做
Map<String,boolean> pojoMap= new HashMap<>();
for(Field field : pojo.getClass().getFields()){
field.setAccessible(true);
pojoMap.put(field.getName(),f.get(pojo)!=null);
} //now pojoMap has all the names of your fields inside pojo and a boolean value
// to check if they are null or not
你可以检查循环后你pojos的字段是否为“空”。 – f1sh
这意味着检查每个字段的分段,这会很麻烦 –
在select..case语句中设置一个标志 - 或者相当于一个枚举值为'pojo','pojo2','both','both' 。或者,使用方面(矫枉过正)。 –