2017-09-14 52 views
0

我想作以下驗證:春天啓動的自定義字段驗證

  • 在一封電子郵件中檢查存在於數據庫中。
  • 在數據庫中存在檢查用戶名。
  • 檢查密碼確認是否正確輸入。

我正在使用一個類進行驗證。例如:

public class RegisterRequest { 

    @NotNull(message = "Please enter an email") 
    @Email(message = "Not a valid email") 
    @JsonProperty("email") 
    public String email; 

    @NotNull(message = "Please enter a name") 
    @JsonProperty("name") 
    public String name; 

    @NotNull(message = "Please enter a password") 
    @JsonProperty("password") 
    public String password; 

    @NotNull 
    @JsonProperty("password_confirmation") 
    public String passwordConfirmation; 
} 

直到目前爲止,這一切都工作正常。
但現在我想建立在密碼驗證(檢查2密碼的匹配)。我只會使用這一次,所以我認爲沒有必要爲此創建一個完整的註釋。
如何在不使用註釋的情況下做到這一點。

我發現,來關閉到我想要的是一個方法,使用@AssertTrue一個驗證密碼的解決方案:

@AssertTrue("Passwords don't match") 
public boolean checkPasswords() { 
    return this.password.equals(this.passwordConfirmation); 
} 

這工作,但它沒有連接到一個領域,但它是一個全球性的錯誤。
所以我找不到Passwords don't match錯誤屬於哪個字段。 有沒有辦法將checkPasswords驗證鏈接到一個字段?

+1

https://www.mkyong.com/spring-mvc/spring-mvc-password-example/ – StanislavL

+1

@StanislavL此鏈接7歲,談論舊的驗證方式。請注意,作者將'bean-validation'標記和JSR-303註釋放在一起。 –

回答

1

這可行,但它沒有鏈接到一個字段,但它是一個全局錯誤。

是的,這是一個全局錯誤,因爲您正在處理整個對象。

如何在不使用註釋的情況下做到這一點。

我不知道這樣的方法。你必須編寫你自己的驗證器才能實現。

+0

謝謝我寫了我自己的:https://github.com/jwz104/validation這是一個完成很長的路,但基地在那裏。 –

+0

幾年前我也寫了自己的:[FieldsMatchValidator](https://github.com/php-coder/mystamps/blob/581412f565c71ecc482da5542e7ff77fe6a91a7f/src/main/java/ru/mystamps/web/support/beanvalidation/FieldsMatchValidator .java)和[UniqueLoginValidator](https://github.com/php-coder/mystamps/blob/581412f565c71ecc482da5542e7ff77fe6a91a7f/src/main/java/ru/mystamps/web/support/beanvalidation/UniqueLoginValidator.java) –