2014-01-08 36 views
0

在我的課程中,我有一個屬性爲短代碼列表:List[ShortCode]使用Java中的註釋驗證字符串列表

我有一個自定義的有效短代碼註釋爲ValidShortCode

代碼此實現:

@Target({ METHOD, FIELD, ANNOTATION_TYPE }) 

@Retention(RUNTIME) 

@Constraint(validatedBy = ShortCodeValidator.class) 

@Documented 

public @interface ValidShortCode { 

String message() default "{ValidShortCode.message}"; 

Class<?>[] groups() default {}; 

Class<? extends Payload>[] payload() default {}; 

} 

public class ShortCodeValidator implements ConstraintValidator<ValidShortCode, String> { 
private static final int MIN_LENGTH = 1; 
private static final int MAX_LENGTH = 15; 
private static final int EMPTY_LENGTH = 0; 
@Override 
public void initialize(ValidShortCode shortCode) { 
    // TODO Auto-generated method stub 
} 

@Override 
public boolean isValid(final String value, 
     final ConstraintValidatorContext constraintContext) { 
    boolean valid = false; 
    if (null == value || value.trim().length() == EMPTY_LENGTH) { 
     valid = true; 
    } 
    else if((value.trim().length() >= MIN_LENGTH)&&(value.trim().length() <= MAX_LENGTH)){ 
     valid = value.matches("([A-Za-z0-9])+"); 
    } 
    return valid; 
} 
} 

以及驗證上述List[ShortCode]我寫的另一個定義註解此列表的短代碼。

我有一個想法,在這個自定義註釋中再次驗證短代碼,但它是代碼重複。

在我的驗證短代碼的列表定義註解,我有這樣的:

public class ListValidator implements ConstraintValidator<ValidList, List<String>> { 
private static final int EMPTY_SIZE = 0; 

@Override 
public void initialize(ValidList validList) { 
    // TODO Auto-generated method stub 
} 

@Override 
public boolean isValid(final List<String> value, 
     final ConstraintValidatorContext constraintContext) { 
    boolean valid = false; 
    if (null == value || value.size() == EMPTY_SIZE) { 
     valid = true; 
    } 
    else { 
     for(String shortCode: value) { 
      // Implementing the same code as done for the previous short code annotation 
     } 
    } 
    return valid; 
} 
} 

可有一個人幫我,讓我知道我可以重複使用自定義的註釋ValidShort或任何其他有效的方法解決這種情況?

謝謝。

+0

參見http://stackoverflow.com/questions/7865209/how-to-create-a-constraintvalidator-for-list – bdrx

回答

0

沒有什麼能阻止你使用你已經實現了相同的驗證:

@Override 
public boolean isValid(final List<String> value, 
     final ConstraintValidatorContext constraintContext) { 
    boolean valid = true; 
    if (null != value && value.size() != EMPTY_SIZE) { 
     ShortCodeValidator validator = new ShortCodeValidator();  
     for(String shortCode: value) { 
      result &= validator.isValid(shortCode); 
     } 
    } 
    return valid; 
} 

此示例假設如果列表中的項目至少有一個是無效的列表驗證應該失敗。

2

你可以不用自定義驗證器。
包裹短代碼的類內和驗證字符串無論是在吸氣或成員本身:

class ShortCode { 
    private String value; 

    ShortCode(String value) { 
     this.value = value.trim(); 
    } 

    @Pattern(regexp="PATTERN") 
    @Size(min=1, max=15) 
    String getValue() { 
     return value; 
    } 
} 

列表之前添加註釋@Valid,這樣列表中的所有元素會根據驗證驗證上述所定義:

@Valid 
List<ShortCode> shortCodesList; 
+0

清潔溶液。更容易實施,更易於閱讀。 – tbraun