有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何组合验证两个或多个字段?在方法上

我希望你很好

现在,我正在开发一个自定义注释来验证方法中的参数,方法如下:

界面:

@Target({METHOD})
@Retention(RUNTIME)
@Constraint(validatedBy = ValidarImpl.class)
public @interface Validar {
    public abstract String message() default "ERROR VALIDATION";
    public abstract Class<?>[] groups() default {};
    public abstract Class<? extends Payload>[] payload() default {};
}

类别:

public class ValidarImpl implements ConstraintValidator<Validar, Object> {

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {

        return false;
    }

}

注释的实现:

@Validar 
public void method1 (@Positive int value, @Valid Car car){}

我正试图从ConstraintValidatorContext类中获取参数的名称及其值,目的是验证method1方法的参数,但是我还不能这样做

我想这样做:How can I validate two or more fields in combination?使用方法

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    您可以参考https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/?v=6.1#section-cross-parameter-constraints了解更多详细信息

    您可以按以下方式更改代码:

    @SupportedValidationTarget(ValidationTarget.PARAMETERS)
    public class ValidarImpl implements
    ConstraintValidator < Validar, Object[] > {
    
        @Override
        public boolean isValid(Object[] value, ConstraintValidatorContext context) {
            if (value.length != 2) {
                throw new IllegalArgumentException("Illegal method signature");
            }
    
            if (value[0] == null || value[1] == null) {
                return true;
            }
    
        }
    }