要将自定义的校验器交给Spring Boot管理,可以按照以下步骤进行操作:

  1. 创建一个自定义的校验器类,实现javax.validation.ConstraintValidator接口,并重写isValid方法。例如,创建一个自定义的手机号码校验器:
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class PhoneValidator implements ConstraintValidator<Phone, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 校验逻辑
        return value != null && value.matches("[0-9]+") && value.length() == 11;
    }
}
  1. 在自定义的校验器类上使用@Constraint注解,指定校验器的注解类型。例如,创建一个Phone注解:
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = PhoneValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Phone {

    String message() default "Invalid phone number";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
  1. 在需要使用校验器的实体类的字段上使用自定义的注解。例如,在一个用户实体类中使用@Phone注解校验手机号码字段:
public class User {

    @Phone
    private String phoneNumber;

    // getter和setter方法
}
  1. 在Spring Boot的配置类中,使用@Configuration注解,并添加@EnableWebMvc注解以启用Spring Boot的校验功能。然后,创建一个LocalValidatorFactoryBean的实例,并将自定义的校验器添加到校验器工厂中。最后,将校验器工厂作为LocalValidatorFactoryBeansetValidationMessageSource方法的参数,将其注册到Spring Boot的验证器中。例如:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.validation.beanvalidation.SpringValidatorAdapter;

@Configuration
@EnableWebMvc
public class ValidatorConfig {

    @Bean
    public LocalValidatorFactoryBean localValidatorFactoryBean() {
        LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
        validatorFactoryBean.getValidationPropertyMap().put("hibernate.validator.fail_fast", "true");
        validatorFactoryBean.setValidationMessageSource(messageSource());
        return validatorFactoryBean;
    }

    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor(LocalValidatorFactoryBean validatorFactoryBean) {
        MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
        processor.setValidator(validatorFactoryBean.getValidator());
        return processor;
    }

    @Bean
    public SpringValidatorAdapter springValidatorAdapter(LocalValidatorFactoryBean validatorFactoryBean) {
        return new SpringValidatorAdapter(validatorFactoryBean.getValidator());
    }

    @Bean
    public MessageSource messageSource() {
        // 返回自定义的MessageSource实例,用于国际化校验错误信息
        // ...
    }
}
  1. 在Spring Boot的配置文件中,添加以下配置项,以启用校验功能:
spring.mvc.throw-exception-if-no-handler-found=true
spring.mvc.static-path-pattern=/**

至此,自定义的校验器已经交给Spring Boot管理。在需要校验的地方,可以使用@Valid注解来触发校验。例如,在Controller的方法参数上使用@Valid注解:

@PostMapping("/users")
public String createUser(@Valid @RequestBody User user, BindingResult result) {
    if (result.hasErrors()) {
        // 处理校验错误
    }
    // ...
}

注意:在上述的代码示例中,User类需要添加@Validated注解,以便在校验失败时能够触发异常处理

springboot 将自定义的校验器 交给springboot管理

原文地址: https://www.cveoy.top/t/topic/i1tK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录