验证程序必须只接受特定的数值

时间:2017-02-21 08:10:15

标签: java spring validation user-input hibernate-validator

我正在使用Hibernate Validator和javax.validation库来验证Spring MVC应用程序中控制器的请求体。有约束的注释有助于最小和最大边界以及数字的数量,但我找不到只接受特定数字的方法。例如,如果我只想接受10,20和50的值?

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

2 个答案:

答案 0 :(得分:5)

您可以创建自己的注释,接受多个值。这涉及编写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})

答案 1 :(得分:2)

您可以实现自定义Bean Validation约束,如Hibernate Validator reference guide中所述。我建议使用一组接受的数值来代替枚举:

@OneOf({ 10, 20, 50 })
int myInt;