如何对Spring Controller @RequestParam的MutualExclusiveFields(email或mobile)应用自定义验证?

问题描述 投票:0回答:1

我有一个带@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); 
}
spring-boot spring-mvc spring-restcontroller spring-validator
1个回答
0
投票

你可以像下面这样做

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.