做为后端开发人员,一定有前端传的数据是可能会出错的警惕性,否则程序就可能会出错,比如常遇到的空指针异常,所以为了程序运行的健壮性,我们必须对每一个参数进行合法校验,就能避免很多不必要的错误,但如果仅仅是if-else则非常冗余且不美观,就可以使用Validated进行参数校验。Validated可以非常优雅的完成参数校验的任务,仅仅需要几个注解。
1.首先,引入Validated依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.使用Validated,使用Validated非常简单,只需要在controller接收的参数前加上 @Validated 注解就行,表示该参数需要校验。也可以在类上加上@Validated注解,表示本类中的方法开始参数校验功能,然后在需要校验的参数前加上@Valid注解,表示后面的参数需要校验。
然后在接收参数的实体类中配置好校验标准,如下,如果实体类属性也是一个实体类,则需要添加@Valid注解,不能添加@Validated注解,然后在去对应的实体类中添加校验属性
此时就完成了参数校验,首先@Validated会告知系统当前参数要进行校验,然后会根据校验对象里面每个属性的校验注解进行逐一的校验,如果不合法就会抛出import org.springframework.web.bind.MethodArgumentNotValidExceptio异常。
3.测试
当使用不合法的参数访问controller时,就会报错
4.统一异常处理,
可以看到报错内容非常不友好,非常长一串,此时就可以使用统一异常处理,捕获MethodArgumentNotValidException发出的异常,当然也能捕获任何异常。重启测试类后,就能获取比较直观明显简洁的报错信息了
5.当然,除了通过在接收参数前注解声明校验并在实体类的属性上加注解进行校验,也可以直接在方法的参数上校验,
基本类型参数或简单类型参数通常不需要使用@Valid ,适用@Valid的方法除了上面提到的一个,还有当请求体为JSON时,也需要添加@Valid
但我暂时没找到对集合比如map的键值对进行校验的方法,如有指正,万分感谢