在线文字转语音网站:无界智能 aiwjzn.com

Spring Boot Starter Validation 自定义校验规则 (Custom Validation Rules in Spring Boot Starter Validation)

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 中自定义校验规则的所有步骤。通过自定义校验注解和校验器类,我们可以灵活地根据业务需求添加各种校验规则,提高请求参数的合法性和安全性。