Spring Boot Starter Validation 自定义校验规则 (Custom Validation Rules in Spring Boot Starter Validation)
Spring Boot Starter Validation 是一个用于校验请求参数的框架,它提供了一些常用的校验注解,如@NotNull、@NotBlank、@Size等。然而,有时候我们需要根据业务需求自定义一些校验规则。本文将介绍如何在 Spring Boot Starter Validation 中自定义校验规则,并提供完整的编程代码和相关配置。
在 Spring Boot 中使用自定义校验规则,我们需要完成以下几个步骤:
第一步,定义一个自定义的校验注解。我们可以使用@Constraint 注解来创建一个自定义的校验注解。例如,我们可以创建一个用于校验手机号的注解@Mobile,定义如下:
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MobileValidator.class)
public @interface Mobile {
String message() default "Invalid mobile number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
在上述代码中,我们通过@Target 指定了校验注解的作用范围,这里指定了FIELD和PARAMETER,表示该注解可用于校验字段和方法参数。@Retention 注解指定了该注解在运行时可用。@Constraint 注解指定了该注解的校验逻辑,即使用 MobileValidator 类来校验。
第二步,创建一个校验器类。在上一步中,我们指定了使用 MobileValidator 类来校验手机号。下面是 MobileValidator 类的实现:
public class MobileValidator implements ConstraintValidator<Mobile, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
// 自定义的手机号校验逻辑
return value.matches("^(13[0-9]|14[57]|15[0-35-9]|166|17[3678]|18[0-9]|19[89])\\d{8}$");
}
}
在 MobileValidator 类中,我们实现了 ConstraintValidator 接口,并指定了校验注解为 Mobile,待校验的值类型为 String。在 isValid 方法中,我们可以编写自定义的校验逻辑。在本例中,我们使用了正则表达式来校验手机号码的格式。
第三步,使用自定义注解进行校验。在需要进行校验的字段上使用 @Mobile 注解,示例如下:
public class User {
@Mobile
private String mobile;
// getter and setter methods
}
在上述代码中,我们为 User 类的 mobile 字段添加了 @Mobile 注解,表示该字段需要进行手机号校验。
第四步,开启校验功能。为了使自定义校验规则生效,我们需要在 Spring Boot 的配置文件中开启校验功能。在 application.properties 或 application.yml 文件中添加如下配置:
yaml
spring.mvc.throw-exception-if-no-handler-found: true
spring.mvc.static-path-pattern: /**
spring.mvc.validation.message-source: classpath:ValidationMessages
完成以上步骤后,我们就可以在 Controller 中进行参数校验了。例如,我们可以创建一个 UserController 类,并在其中编写一个方法来接收用户注册请求:
@RestController
public class UserController {
@PostMapping("/register")
public String registerUser(@Valid @RequestBody User user) {
// 处理用户注册逻辑
return "User registered successfully";
}
}
在上述代码中,我们使用了 @Valid 注解来开启参数校验,并将一个 User 对象作为请求体的参数。当请求参数不满足校验规则时,Spring Boot 会自动抛出 MethodArgumentNotValidException 异常。
至此,我们已经完成了在 Spring Boot Starter Validation 中自定义校验规则的所有步骤。通过自定义校验注解和校验器类,我们可以灵活地根据业务需求添加各种校验规则,提高请求参数的合法性和安全性。