目录
简述
在实际开发项目中我们需要对客户端传递到服务器的参数进行校验,用于判定请求参数的合法性,假如请求参数不合法,不可以去执行后续的业务。该如何校验?一种方式是我们在控制层方法中每次都自己进行参数有限制判断,不合法可以抛出异常,但是工作量和代码复杂度会比较高。第二种方式即使采取市场上主流的Spring Validation框架去实现校验。
添加依赖
<!-- Spring Boot中的Spring Validation的依赖项,用于检查方法的参数的基本有效性 -->
<!-- 基本有效性:就是一些浅显的检查,数字大小超标、文字长度,字符串格式,不需要连接数据库就可以检验出来的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
应用
添加注解
根据业务需求,将@Validated / @Valid添加在需要提交校验的参数的前,加了之后告诉Spring Validation框架需要检查此参数。以TagTypeAddNewParam对象为例。
public JsonResult addNew(@Validated TagTypeAddNewParam tagTypeAddNewParam){
log.debug("开始处理【新增标签类别】的请求,参数:{}",tagTypeAddNewParam);
tagService.addNew(tagTypeAddNewParam);
return JsonResult.ok();
}
检查规则注解
- @NotNull:没有提交参数,不予通过。
- @NotEmpty:没有提交参数或者提交参数字符串长度为零,不予通过。
- @NotBlank:不允许为空白,例如 空格是不允许的。局限于字符串类型的参数。(“a b”检查通过,这样中间空格问题解决不了)。
- @Pattern:使用正则表达式进行检查字符串。但是不检查是否为null,配合@NotNull使用。
- @Range:此注解两个参数 min最小值默认为0,max最大值,message提示信息
配置检查规则
对校验参数对象的属性进行规则配置:
@NotNull(message = "xxx"):被此注解标注的属性将不能为空,客户端在该字段的输入框不输入内容不是null,它是一个空字符串,从API文档测试中将此属性值的输入框删除,太能测试效果,这样前端会报400错误代码,表示请求参数格式错误。该注解属性message是为了区分哪个属性值提交时违背了Spring Validation框架的校验机制,给与提示信息。这个时候全局异常处理中就不去自己组织语言了。
之所以前端会报错400,是因为Spring框架自带的处理异常,将此异常进行解析,返回给前端一个400错误。它的默认处理异常不是我们想要的效果,就需要自己去全局异常处理进行捕获此异常并自定义处理。
/**
* 新增标签类型的参数类
*/
@Data
public class TagTypeAddNewParam implements Serializable {
/**
* 标签类别名称
*/
@NotNull(message = "新增标签类别失败,请提交标签