2016-03-03 76 views
1

我有寫函數,我遍歷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' 。或者,使用方面(矯枉過正)。 –

回答

0

你可以實現你的pojo使用地圖作爲所有屬性的容器。然後,「任何屬性集」轉換爲在該地圖上調用「isEmpty()」。或者你直接使用內置的java properties

0

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