共计 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 ;
}
}
正文完