springboot 将自定义的校验器 交给springboot管理
要将自定义的校验器交给Spring Boot管理,可以按照以下步骤进行操作:
- 创建一个自定义的校验器类,实现
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;
}
}
- 在自定义的校验器类上使用
@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 {};
}
- 在需要使用校验器的实体类的字段上使用自定义的注解。例如,在一个用户实体类中使用
@Phone注解校验手机号码字段:
public class User {
@Phone
private String phoneNumber;
// getter和setter方法
}
- 在Spring Boot的配置类中,使用
@Configuration注解,并添加@EnableWebMvc注解以启用Spring Boot的校验功能。然后,创建一个LocalValidatorFactoryBean的实例,并将自定义的校验器添加到校验器工厂中。最后,将校验器工厂作为LocalValidatorFactoryBean的setValidationMessageSource方法的参数,将其注册到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实例,用于国际化校验错误信息
// ...
}
}
- 在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注解,以便在校验失败时能够触发异常处理
原文地址: https://www.cveoy.top/t/topic/i1tK 著作权归作者所有。请勿转载和采集!