我有一个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;

10-06 09:43