2017-02-21 61 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; 
相關問題