检查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); 
} 

所以pojopojo2阅读查询字符串后正在设置。

现在我想知道是否设置了pojo的任何属性。 每当设置pojo的属性时,一个选项就是将标志设置为真。

有什么有效的方法吗?

+0

你可以检查循环后你pojos的字段是否为“空”。 – f1sh

+0

这意味着检查每个字段的分段,这会很麻烦 –

+0

在select..case语句中设置一个标志 - 或者相当于一个枚举值为'pojo','pojo2','both','both' 。或者,使用方面(矫枉过正)。 –

你可以实现你的pojo使用地图作为所有属性的容器。然后,“任何属性集”转换为在该地图上调用“isEmpty()”。或者你直接使用内置的java properties

方法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