2

我很想将@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 中的类路径中,以防旧版本出现问题。

我用“play test my-server”启动服务器,然后用浏览器导航到我的网站(还不是测试,只是简单的网站)。

谢谢,亚历克斯

PS我知道“null is evil”的讨论,但我无权访问其余代码,所以我无法改变它。

4

2 回答 2

1

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

由于您不在控制器中,因此不会执行 Validation on annotation,并且 Required 注释不会在 Validation.hasErrors()

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

但是,我认为您不应该这样做,因为来自 Validation.hasError() 的错误应该来自控制器操作调用上的 Validation,它可能会给您带来副作用。

如果您想做类似示例的操作,则不应依赖 play Validation 类。

你确定你在正确的地方使用验证吗?

于 2011-12-20T20:22:12.657 回答
1

以防有人仍然需要这个。

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

于 2012-12-10T09:46:44.847 回答