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

javax验证大于或小于来自其他属性的验证,java,validation,javax,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") pr

关于
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;

我还想验证FROM应该小于应该大于FROM?如何使用javax验证的注释实现这一点?

您需要一个自定义的
跨字段验证
注释

一种方法是使用
@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;
    }
}

或者只需手动验证两个字段的关系。

检查上述链接
@RangeCheck(message = "your messgae")
public class YourDto {
   // from
   // to
}