SpringBoot 这样做参数校验才足够优雅!看完以后就不用if-else做校验

190次阅读
没有评论

共计 1172 个字符,预计需要花费 3 分钟才能阅读完成。

一、概述

当我们想提供可靠的 API 接口,对参数的校验,以保证最终数据入库的正确性,是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数,写了一大堆的 if else 进行校验,非常的不优雅,比起枯燥的 CRUD 来说,参数校验更是枯燥。这只是一个创建菜单的校验,只需要判断菜单,菜单 url 以及菜单的父类 id 是否为空,上级菜单是否挂载正确,这样已经消耗掉了 30,40 行代码了,更不要说,管理后台创建商品这种参数贼多的接口。估计要写几百行校验代码了。

 /**
  * 验证参数是否正确
  */
private void verifyForm(SysMenuEntity menu){if(StringUtils.isBlank(menu.getName())){throw new RRException(" 菜单名称不能为空 ");
    }

    if(menu.getParentId() == null){throw new RRException(" 上级菜单不能为空 ");
    }

    // 菜单
    if(menu.getType() == Constant.MenuType.MENU.getValue()){if(StringUtils.isBlank(menu.getUrl())){throw new RRException(" 菜单 URL 不能为空 ");
        }
    }

    // 上级菜单类型
    int parentType = Constant.MenuType.CATALOG.getValue();
    if(menu.getParentId() != 0){SysMenuEntity parentMenu = sysMenuService.getById(menu.getParentId());
        parentType = parentMenu.getType();}

    // 目录、菜单
    if(menu.getType() == Constant.MenuType.CATALOG.getValue() ||
       menu.getType() == Constant.MenuType.MENU.getValue()){if(parentType != Constant.MenuType.CATALOG.getValue()){throw new RRException(" 上级菜单只能为目录类型 ");
        }
        return ;
    }

    // 按钮
    if(menu.getType() == Constant.MenuType.BUTTON.getValue()){if(parentType != Constant.MenuType.MENU.getValue()){throw new RRException(" 上级菜单只能为菜单类型 ");
        }
        return ;
    }
}
正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-05-05发表,共计1172字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)