必须仅接受特定数字值的验证器



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

我知道可以使用org.springframework.validation.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})

您可以在Hibernate验证器参考指南中深入所述实现自定义BEAN验证约束。而不是枚举,我建议使用所接受数值的数组:

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

相关内容

  • 没有找到相关文章

最新更新