2017-10-05 47 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; 
    } 
}