2017-10-05 2 views
0

必要なフィールドがほとんどないjsonリクエストがあります。私のコードでは、最初のチェックで必須フィールドをチェックし、欠落している場合はフィールド名のないエラーをスローします。これを達成する最良の方法は何か。以下は私のコードです多くのIfブロックを削除する方法

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; 

    } 

上記のブロックは機能しますが、どのフィールド/フィールドが空であるかを知ることはできません。可能な解決策の1つは、多くの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); 

マップをフィルタリングし、(ジャワ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; 
    } 
} 
関連する問題