在 Spring Boot 中,数据校验是开发过程中重要的一环,它可以帮助您在用户输入数据之前进行验证,以确保数据的有效性和完整性。使用 Spring Boot 提供的数据校验功能,您可以轻松地在控制器层对输入数据进行验证,避免无效或不合法的数据进入系统。本文将详细介绍在 Spring Boot 中如何进行数据校验。
1. 使用 JSR 303 标准注解
Spring Boot 基于 JSR 303 标准提供了数据校验的功能,您可以在实体类的属性上使用注解进行校验。常用的校验注解包括:
@NotNull
:值不能为 null。@NotBlank
:字符串不能为 null、空字符串或只包含空白字符。@NotEmpty
:集合、数组或字符串不能为 null 或空。@Min
:值必须大于等于指定值。@Max
:值必须小于等于指定值。@Size
:集合、数组或字符串的大小必须在指定范围内。
2. 在控制器层进行数据校验
在控制器层,您可以使用 @Valid
注解将要校验的参数标记为需要验证。如果数据不合法,将会触发校验异常。
@RestController
public class UserController {
@PostMapping("/users")
public ResponseEntity<String> createUser(@Valid @RequestBody UserRequest userRequest) {
// 处理用户创建逻辑
return ResponseEntity.ok("User created successfully");
}
}
3. 创建校验错误处理器
当数据校验失败时,Spring Boot 会抛出 MethodArgumentNotValidException
异常。您可以通过编写全局异常处理器来捕获并处理这些异常。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationException(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return ResponseEntity.badRequest().body(errors);
}
}
4. 自定义校验注解
除了使用标准的校验注解,您还可以自定义校验注解,以适应特定的业务需求。
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UniqueEmailValidator.class)
public @interface UniqueEmail {
String message() default "Email already exists";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
5. 编写自定义校验逻辑
实现自定义校验注解所需的校验逻辑。
public class UniqueEmailValidator implements ConstraintValidator<UniqueEmail, String> {
@Autowired
private UserRepository userRepository;
@Override
public boolean isValid(String email, ConstraintValidatorContext context) {
return !userRepository.existsByEmail(email);
}
}
通过上述方法,您可以在 Spring Boot 中轻松地实现数据校验,确保输入数据的有效性和完整性。通过使用标准和自定义的校验注解,您可以在控制器层对用户输入进行验证,并通过全局异常处理器捕获和处理校验错误,从而保证系统的数据质量和安全性。