除了javax.validation
库之外,我还在使用Hibernate Validator来验证Spring MVC应用程序中控制器的请求主体。有一些约束的注释可以帮助最小和最大边界以及数字的数量,但是我找不到只接受特定数字的方法。例如,如果我只想接受值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})