我有一个带@RequestParam的Spring Boot get API,我需要帮助在MutualExclusiveFields(email或mobile)上应用自定义验证,即我想确保 "email "或 "mobile number "不是null? 任何一个应该是可用的。
public ResponseEntity<Response> employeeInfo(@ApiParam(value = "empiId",required = true, example = "1")
@RequestParam(name ="empiId",required = true) Long empiId,
@RequestParam(name ="emailId",required = false) String emailId,
@RequestParam(name ="mobileNumber",required = false) String mobileNumber) {
System.out.println(empiId+ emailId+mobileNumber);
}
你可以像下面这样做
public ResponseEntity<Response> employeeInfo(@ApiParam(value = "empiId",required = true, example = "1")
@EmployeeId @RequestParam(name ="empiId",required = true) Long serviceRequestId,
@EmailId @RequestParam(name ="emailId",required = false) String emailId,
@Mobile @RequestParam(name ="mobileNumber",required = false) String mobileNumber) {
System.out.println(empiId+ emailId+mobileNumber);
}
自定义电话验证器接口
@Documented
@Constraint(validatedBy = PhoneValidator.class)
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Phone{
String message() default "Wrong!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
自定义电话验证器的实施
@Component
public class PhoneValidator implements ConstraintValidator<Phone, String> {
@Override
public void initialize(Phoneparam) {}
@Override
public boolean isValid(String givenParam, ConstraintValidatorContext context) {
return givenParam!= null && givenParam.matches("[0-9]+")
&& (givenParam.length() > 8) && (givenParam.length() < 14);
}
}
要使用Spring验证实现,需要在配置类中定义以下@Bean。
@Bean
public Validator validator() {
return new LocalValidatorFactoryBean();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator());
return methodValidationPostProcessor;
}