我很乐意将@NotNull注释(或@Required或任何东西)用于我自己的方法。虽然这在Controller和Model类中运行得很好但我不能让它在我自己的工作中运行。这可能更像是一个net.sf.oval问题然后播放框架。但它可能是连接的,我不知道。
我有一个类:
@net.sf.oval.guard.Guarded
public class SimulatorWrapper {
public SimulatorWrapper setRedCode(@play.data.validation.Required @net.sf.oval.constraint.NotNull final String redCode) {
// just gessing here:
if(Validation.hasErrors()) throw new RuntimeException("invalid argument");
if(redCode == null) throw new RuntimeException("null");
// do stuff
return this;
}
}
当我使用null参数调用此方法时,if会抛出我的异常,但@NotNull和@Required似乎什么都不做。我究竟做错了什么? play框架项目带有椭圆形1.5,我下载了1.8并将其添加到eclipse的classpath中,以防旧版本出现问题。
我正在使用“play test my-server”启动服务器,然后使用浏览器导航到我的网站(不是测试,只是简单的网站)。
谢谢,Alex
P.S。我知道“null is evil”讨论,但我无法访问其余的代码,所以我无法改变它。
答案 0 :(得分:1)
只有在调用控制器操作时,才会调用验证类来检查Play框架的验证注释。
由于您不在控制器中,因此不会执行注释验证,并且必需注释不会出现在Validation.hasErrors()
中您可以使用以下方法,而不是使用注释: Validation.required(REDCODE); //它会检查null 然后,调用Validation.hasErrors(),它应该可以工作。
但是,我不认为你应该这样做,因为来自Validation.hasError()的错误应来自控制器动作调用的验证,它可能会引起你的副作用。
如果你想做你的例子,你不应该依赖于游戏验证类。
您确定在正确的位置使用验证吗?
答案 1 :(得分:1)
如果有人仍然需要这个。
您可以使用与控制器中完全相同的方式在所有类中使用Play注释进行验证。 只需使用validate插件。