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());
    }
}