2013-08-26 41 views
0

我必須把不同的驗證了不同的階段。 例如:我有一個具有這些屬性的學生課 public class Student ID integer rollNumber; 字符串名稱; 整數年齡, 字符串fathersName, 字符串mothersName }如何使驗證定製註釋春天

我在不同的條件數據庫中保存之前驗證對象: 1.如果保存爲草稿階段則僅標識和rollnumber應該是強制性的, 2.如果保存是用於提交階段,則所有字段都應該是強制性的。

有沒有什麼方法可以寫註釋,我可以根據註釋使用@draft和@submit來定義這些驗證。例如@Valid(類型=草案)

回答

1

在這裏你去。這是不是很艱難。我將分享你的代碼來驗證一個字符串是一個有效的IP地址:

你需要寫爲驗證註解,你需要寫一個具體的校驗實現:

以下是你可以在特定領域使用驗證器要驗證註釋類:

@Target({ FIELD}) 
@Retention(RUNTIME) 
@Constraint(validatedBy = InetAddressValidator.class) 
@Documented 

public @interface ValidIP { 

    String message() default "{ValidIP.message}"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 

} 

現在,您需要寫一個具體的驗證器實現a S下:

public class InetAddressValidator implements ConstraintValidator<ValidIP, String> { 

private static final Pattern IPV4_PATTERN = 
Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."); 
public boolean isValid(String value, ConstraintValidatorContext context) { 

    if (!(CommonUtility.isNullOrEmpty(value) || IPV4_PATTERN.matcher(value).matches()))  
    { 
    return false; 
    } 

    return true; 
} 

public void initialize(ValidIP parameters) { 

} 

} 

可以包括在現場這個註解,如:

@ValidIP(message = "Enter a valid IP address") 
private String ip; 

不是這將綁定時間工作時,彈簧會嘗試將表單參數映射到豆。

只要指出,isValid方法是需要有邏輯來檢查有效性的方法。

initialize方法是在調用isValid之前用於執行任何初始化的方法。

試試這個,如果你仍然需要你的定製問題的幫助,讓我知道我可能有一些時間爲你寫。

+0

不用客氣 – dharam

+0

我需要驗證控制器級別的對象。如同在控制器上一樣,您可以編寫用於驗證對象的「@valid」註釋。我想自定義「@Valid」註釋SI,如果我給你「@Valid」中的控制器(類型=「草案」),那麼它應該驗證只卷號和ID,如果我給你「@Valid」(類型='保存'),那麼它應該驗證學生的屬性。 – user1183194

+0

你會然後把一組草案(基本上是空的標記類調用草案)對所有的驗證註解卷號和ID的驗證註解,並且所有的組,使用支持團體春特定的驗證註解驗證 - @Validated(Draft.class) –