使用Play!框架进行领域对象验证

4
我希望能够验证一个域对象,而不需要自动参数绑定来限制客户端可以设置的属性。
下面是一个类(来自Play!文档的示例)...
public class User {

    @Required
    public String name;

    @Required
    @Min(0)
    public Integer age;
}

通常会这样验证...

public static void hello(@Valid User user) {
   if(validation.hasErrors()) {
       params.flash();
       validation.keep();
       index();
   }
   render(user);
}

在这种情况下,客户端可以设置user的所有字段。
是否可能使用Play! 1.2显式触发领域对象验证(而非“控制器验证”)?
public static void hello(long id, String name) {
   User user = User.findById(id);
   user.name = name;

   user.validate(); // <-- I miss something like this 

   if(validation.hasErrors()) {
       params.flash(); 
       validation.keep(); 
       index();
   }
   render(user);
}
2个回答

4
尝试过了吗?
validation.valid(user);

如果“验证”没有被实例化,而且根本不在任何操作中,那该怎么办? - Stefano
算了,找到了:验证对象创建器是受保护的,但有一个“.current()”... - Stefano

1

您可以在name参数上添加@Required,并将代码转换为:

public static void hello(long id, @Required String name) {
   if(validation.hasErrors()) {
       params.flash(); 
       validation.keep(); 
       index();
   } 
   User user = User.findById(id);
   user.name = name;
   render(user);
}

您可以通过扩展注释来实现国际化,例如:@Required(message="key.to.i18n.message")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接