【问题标题】:Play framework, Different constraints for different requests播放框架,不同请求的不同约束
【发布时间】:2014-10-17 04:04:24
【问题描述】:

如何针对不同的请求实现不同的约束?比如有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() 操作创建单独的类吗? 有什么方法可以只使用一个类吗?

【问题讨论】:

    标签: java playframework playframework-2.2


    【解决方案1】:

    将“后端实体”注释与“前端实体”注释混用是不好的做法。创建单独的类用于插入用户并相应地使用 @Required 注释更新用户。从 User 实体中移除前端注释,只保留 JPA 注释,如 @Id @Column 等。

    【讨论】:

    • 虽然我同意这个答案并且实际上按照自己所说的去做,但它并没有回答 OP 的实际问题(也许应该是评论)。但是,我会推荐这种方法作为应该采取的方法。
    【解决方案2】:

    由于 Play 的验证框架符合 Java bean 验证规范 (JSR-303),因此您可以使用规范中的验证组功能。这正是您正在寻找的 - 一种针对不同操作执行不同验证规则的巧妙方法。您可以在this answer I gave to a similar question 的代码中查看如何使用它的示例。

    【讨论】:

    • 感谢您的回答。一个属性可以有多个组吗?比如groups ={A.class, B.classs},像这样
    • @DavaahuuJamsran - 是的。语法是@Required(groups={ Create.class, Update.class })
    • 我玩的是框架 2.2.4,但它不工作。甚至一个组也不工作(@Required(groups=Create.claass))。有什么想法吗?
    • @DavaahuuJamsran 您需要对模型和控制器类进行更改。再看看我的回答中的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多