2014-10-17 79 views
0

如何爲不同的請求實現不同的約束?例如,有User類:玩框架,請求的不同約束

public class User extends Model{ 
    @Required 
    @Email 
    @Id 
    public String email; 

    @Required 
    @Column(length = 50) 
    public String firstname; 

    @Required 
    @Column(length = 50) 
    public String lastname; 

    @Required 
    public String password; 
} 

當我創建一個新的用戶,需要所有的約束。但是當我更新用戶信息時,我不需要密碼約束。

我應該爲createUser()updateUser()動作創建單獨的類嗎? 有什麼辦法可以只用一堂課?

回答

0

由於Play的驗證框架符合Java bean驗證規範(JSR-303),因此您可以使用驗證組功能規範的一部分。這正是你正在尋找的 - 對不同的行爲強制執行不同驗證規則的一種很好的方式。你可以在this answer I gave to a similar question的代碼中看到如何使用它的例子。

+0

謝謝你的回答。一個屬性可以有多個組?例如,groups = {A.class,B.classs},像這樣 – 2014-10-17 08:31:01

+0

@DavaahuuJamsran - 是的。語法是''@Required(groups = {Create.class,Update.class})''。 – avik 2014-10-17 08:44:38

+0

我玩框架2.2.4,它不工作。即使一個組不工作(@Required(groups = Create.claass))。有任何想法嗎? – 2014-10-17 09:04:06

1

將「後端實體」註釋與「前端實體」註釋混合是一種不好的做法。相應地創建單獨的類來插入用戶並使用@Required註釋更新用戶。從用戶實體中刪除前端註釋並僅保留@Id @Column等JPA註釋。

+0

雖然我同意這個答案,並且實際上做了它自己說的話,但它並沒有回答OP的實際問題(應該是一個評論也許)。不過,我會推薦這種做法。 – Neilos 2014-10-17 11:05:05