背景
通常项目接口存在大量的校验逻辑,校验传入的请求的参数的合法性。这些校验逻辑,不使用框架提供的validator的话,会让校验代码大批的混在业务逻辑处理代码中,而springboot本身就是有提供校验功能的,我们可以考虑使用它,将校验逻辑从业务代码中抽出来,使业务逻辑处理代码更清晰简单,专注于处理业务功能,系统的代码会更优雅和干净。
使用方法介绍
1、pom文件中增加相应的依赖:
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
2、 在需校验的controller接口方法的参数中,增加 @Validated(可以选配校验规则组), 增加参数BindingResult bindingResult 在方法中增加bindingResult.hasErrors()判断并处理。或者统一由拦截器拦截处理。
3、在controller接收参数中,配置校验规则注解,例如:
@NotNull(message="id不能为空",groups{UpdateGroup.class})
private Long id;
@NotNull(message="名字不能为空",groups={AddGroup.class})
@Length(min=3,max=45,
message="名字长度必须在3到45之间",
groups={AddGroup.class,UpdateGroup.class})
private String name;
在需要嵌套校验的地方,可以用@Valid声明嵌套校验
问题与建议
不使用框架统一校验,容易出现接口没有校验参数的情况,导致过于依赖前端校验,万一有人绕过前端直接请求,系统可能会有未知风险。建议不管前端有没有校验,后端都要校验,并校验的方式不要直接写在业务逻辑代码中,这样会让业务逻辑代码不干净,显得臃肿,建议用框架提供的校验器提供统一的校验。