java - 必须只接受特定数值的 validator

标签 java spring validation user-input hibernate-validator

除了 javax.validation,我还在使用 Hibernate Validator用于验证 Spring MVC 应用程序中 Controller 的请求主体的库。约束的注释有助于最小和最大边界以及位数,但我找不到只接受特定数字的方法。例如,如果我只想接受值 10、20 和 50,该怎么办?

我知道可以使用 org.springframework.validation.Validator界面以创建更复杂的规则。想到的另一件事是创建一个具有所需数值的枚举,但这似乎不是一个干净的解决方案。我很想知道是否有更好、更简单的方法来实现我想要的。

最佳答案

您可以创建自己的接受多个值的注释。这涉及编写一个 Annotation 类和一个 Validator 类:

public class OneOfValidator implements ConstraintValidator<OneOf, Integer> {}

和注释:
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = OneOfValidator.class)
public @interface OneOf {
    String message() default "value must match one of the values in the list";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    int[] value() default {};
}

然后你可以像这样使用它:
@OneOf({2, 3, 5, 9})

关于java - 必须只接受特定数值的 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42361846/

相关文章:

Spring Cloud 与 Spring 平台 BOM

java - 我怎样才能修改mysql更新方法?

ruby - Rails rspec - 如何检查具有 ", if: :direct"子句的验证模型

java - Springframework 中的单独序列化器

javascript - 使用输入类获取经过验证的输入的父级

php - Laravel 数组验证

Java新手: How to use Java Agent From the Command Line for Instrumentation

java - 根据用户输入计算平均值

java - 如何减慢时间轴关键帧持续时间

java - Lambda 函数输出为对象