使用net.sf.oval进行参数验证(在播放框架中)

时间:2011-12-19 13:55:35

标签: validation playframework oval

我很乐意将@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”讨论,但我无法访问其余的代码,所以我无法改变它。

2 个答案:

答案 0 :(得分:1)

只有在调用控制器操作时,才会调用验证类来检查Play框架的验证注释。

由于您不在控制器中,因此不会执行注释验证,并且必需注释不会出现在Validation.hasErrors()

您可以使用以下方法,而不是使用注释: Validation.required(REDCODE); //它会检查null 然后,调用Validation.hasErrors(),它应该可以工作。

但是,我不认为你应该这样做,因为来自Validation.hasError()的错误应来自控制器动作调用的验证,它可能会引起你的副作用。

如果你想做你的例子,你不应该依赖于游戏验证类。

您确定在正确的位置使用验证吗?

答案 1 :(得分:1)

如果有人仍然需要这个。

您可以使用与控制器中完全相同的方式在所有类中使用Play注释进行验证。 只需使用validate插件。