2017-10-05 29 views
0

我有一個json請求,它有幾個必填字段。在我的代碼中,初始檢查是檢查所需的字段,如果它們丟失,則丟失字段名稱的錯誤。什麼纔是實現這一目標的最佳途徑。以下是我的代碼如何刪除很多如果塊

Boolean isRequiredFlag = true; 
    if(String.isBlank(custReq.partnerId) || String.isBlank(custReq.partnerRepName) || String.isBlank(custReq.name.first) || String.isBlank(custReq.name.last) 
     || String.isBlank(custReq.address.addrLine1) || String.isBlank(custReq.address.city) || String.isBlank(custReq.address.state) || String.isBlank(custReq.address.postalCode) 
     || String.isBlank(custReq.phones.phone)){ 
     isRequiredFlag = false; 

    } 

以上塊的工作原理,但不可能得到哪個字段/字段爲空。一個可能的解決方案是做很多if語句,但如果有人可以建議更好的方法來做到這一點,我將非常感激。

回答

0

一種方法是創建地圖所​​需的字段名和它們的值,然後過濾地圖空白字段值:

Map<String, String> requiredFields = new HashMap<String, String>(); 
requiredFields.put("partnerId", custReq.partnerId); 
requiredFields.put("partnerRepName", custReq.partnerRepName); 
requiredFields.put("name.first", custReq.name.first); 
... 
requiredFields.put("phones.phone", custReq.phones.phone); 

要過濾地圖,收集具有空值(在Java中8)字段的名稱:

List<String> missingFieldNames = 
    requiredFields.entrySet() 
        .stream() 
        .filter(entry -> StringUtils.isBlank(entry.getValue())) 
        .map(entry -> entry.getKey()) 
        .collect(Collectors.toList()); 

現在你有缺少的字段名稱。並設置標誌:

Boolean isRequiredFlag = missingFieldNames.isEmpty() ? true : false; 
1

通過屬性使用一個迭代循環應該是一個好主意:

Boolean isRequiredFlag = true; 
JSONObject custReqObj = new JSONObject(custReq); 
Iterator<?> custReqKeys = custReqObj.keys(); 

while(custReqKeys.hasNext()){ 
    String key = (String)custReqKeys.next(); 
    String value = custReqObj.getString(key); 
    if(String.isBlank(value)) { 
     isRequiredFlag = false; 
    } 
}