2017-02-21 58 views
0

除了使用javax.validation库之外,我还使用Hibernate验证程序来验证Spring MVC应用程序中控制器的请求主体。有限制的注释可以帮助最小和最大边界以及数字的位数,但是我找不到只接受特定数字的方法。例如,如果我只想接受值10,20和50,该怎么办?必须只接受特定数值的验证程序

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

回答

4

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

复制了好听的名字'OneOf'从@Gunnar :) – john16384

2

您可以实现一个自定义的Bean验证约束,如Hibernate验证器reference guide中深入描述的。我建议使用一系列可接受的数值来代替枚举:

@OneOf({ 10, 20, 50 }) 
int myInt; 
相关问题