1. 引入相关依赖
为了使用数据校验,在项目中需要引入相应的依赖。在Spring Boot 2.x版本中,可以通过以下Maven依赖Spring Boot Starter Validation:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 定义校验规则
在Java Bean对象中,可以使用多种校验注解来定义校验规则。例如,在一个用户登录请求的Java Bean对象中,可以使用以下注解对请求参数进行校验:
@Data
public class User {
@NotNull(message = "姓名不能为空")
private String name;
@Max(value = 150, message = "年龄最大不能超过150岁")
@Min(value = 0, message = "年龄最小不能小于0岁")
private Integer age;
@Email(message = "email格式不正确")
private String email;
}
在Spring Boot应用程序中,常用的校验注解包括:
-
@NotNull
:验证注解的元素值不为null。 -
@NotBlank
:验证注解的元素值不为空("")。 -
@NotEmpty
:验证注解的元素值不为null且不为空("")。 -
@Min
:验证注解的元素值大于或等于指定的整数值。 -
@Max
:验证注解的元素值小于或等于指定的整数值。 -
@DecimalMin
:验证注解的元素值大于或等于指定的小数值。 -
@DecimalMax
:验证注解的元素值小于或等于指定的小数值。 -
@Size
:验证注解的元素值的大小在指定的范围内。 -
@Digits
:验证注解的元素值是数字,并且整数位数和小数位数在指定的范围内。 -
@Past
:验证注解的元素值是一个过去的日期或时间。 -
@Future
:验证注解的元素值是一个未来的日期或时间。 -
@Pattern
:验证注解的元素值与指定的正则表达式匹配。 -
@AssertTrue
:验证注解的 boolean 类型元素值为 true。 -
@AssertFalse
:验证注解的 boolean 类型元素值为 false。 -
@Email
:验证注解的元素值是 Email,也可以通过正则表达式和 flag 指定自定义的email校验规则。 -
@Range
:验证注解的元素值是否在数值范围内,暂未实现。 -
@CreditCardNumber
:验证注解的元素值是否符合信用卡格式。
这些校验注解可以通过组合使用来完成更复杂的校验规则,例如@NotBlank
、@Size(min=6, max=20)
可以验证输入的密码是否不为空且长度在6到20个字符之间。在实际开发中,我们可以根据需求选择合适的注解进行校验。
3. 在控制器中使用数据校验
在使用数据校验时,需要在需要校验的Java Bean参数上添加@Valid
,可以确保传递到Controller的对象中的每个属性都被校验。
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping
public String test(@Valid User user) {
// 处理逻辑...
return user.toString();
}
}
4. 解析校验结果
如果校验失败,则会抛出BindException
异常,我们需要做出相应的处理。例如,我们可以捕捉异常并将异常信息返回给客户端:
@RestControllerAdvice
public class ExceptionController {
@ExceptionHandler(BindException.class)
public Map<String, Object> handleValidationException(BindException ex) {
BindingResult bindingResult = ex.getBindingResult();
StringBuilder errorMsgBuilder = new StringBuilder();
for (ObjectError objectError : bindingResult.getAllErrors()) {
errorMsgBuilder.append(objectError.getDefaultMessage()).append(";");
}
return Collections.singletonMap("errorMsg", errorMsgBuilder.toString());
}
}