我有一个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语句,但是如果有人可以提出一种更好的方法,我将不胜感激。
最佳答案
一种方法是创建所需字段名称及其值的映射,然后过滤该映射以查找空白字段值:
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;