我有一个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 :(得分: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;
}
}
答案 1 :(得分: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;