javax 验证大于或小于来自其他属性的验证

Sha*_*oor 6 java validation javax

关于 javax.validation

  @NotNull(message = "From can't be null")
  @Min(value = 1, message = "From must be greater than zero")
  private Long from;
  @NotNull(message = "To can't be null")
  @Min(value = 1, message = "To must be greater than zero")
  private Long to;
Run Code Online (Sandbox Code Playgroud)

我还想验证FROM应该小于TO并且TO应该大于FROM?我们如何使用 javax 验证的注释来做到这一点?

Mạn*_*yễn 5

你需要定制cross field validation注释。

一种方法是用注释您的自定义类@YourCustomAnnotation

YourCustomAnnotationValidator您可以访问您的值,因此您可以在那里实现您的逻辑:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Constraint(validatedBy = DateValidator.class)
public @interface RangeCheck {

    String message();

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

    Class<? extends Payload>[] payload() default {};
}

public class RangeCheckValidtor implements ConstraintValidator<RangeCheck, YourDto> {

    @Override
    public void initialize(RangeCheck date) {
        // Nothing here
    }

    @Override
    public boolean isValid(YourDto dto, ConstraintValidatorContext constraintValidatorContext) {
        if (dto.getFrom() == null || dto.getTo() == null) {
            return true;
        }
        return from < to;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后YourDto用以下标记你的班级@RangeCheck

@RangeCheck(message = "your messgae")
public class YourDto {
   // from
   // to
}
Run Code Online (Sandbox Code Playgroud)

或者简单地手动验证两个字段的关系。