参数的合法性直接影响到程序的安全和性能,因此在进行相关操作前必须检测对象是否为null,是否为blank,是否被初始化等等。
我们先来看看SpringBoot 是如何来检验参数的。
验证总是摆在第一位。
再来分析下Assert 类。 Assert 其实是一个非常简单的工具类。
Assert 类作为一个工具类,不应该被实例化, 因此该类使用 abstract 进行修饰。 没错这就是经常遇到的面试题目, abstract 类不能被实例化。
除此之外 将构造方法使用 private 进行修饰也可以防止类被实例化,这也是常用的编程技巧之一。
Assert 类在SpringBoot 项目中被广泛使用。
为啥使用Assert 类? 因为使用Assert 能使得代码更加简洁明。三行代码变成一行代码,并且Controller 类不需要依赖具体的Exception 类,少依赖一种Exception, import语句减少一行。
@RequestMapping("edit") @RequiresPermissions(value = "fsdd-2") public String edit(@RequestParam @NonNull Long id, Model model) { Classify classify = classifyService.findById(id);
/* if(classify == null){ throw new EntityNotFoundException("被修改的分类不能为空" + id); }*/
Assert.notNullEntity(classify, "被修改的分类不能为空" + id);
model.addAttribute("classify", classify);
return "manage/ClassifyController/edit";
}
修改某条记录时 , id 参数是必须的,并且id不能为空, 并且根据id查询出来的实体对象也不能为空。 当然还必须处于登陆状态,并且拥有相关的角色权限。
到此我们只是验证了参数是否合法并且抛出了异常,但是并没有告诉用户后台发生了什么事情。
使用 @ControllerAdvice 和 @ExceptionHandler 可以捕获不同类型的错误,并且根据错误的类型给前台用户相应的反馈。