проверка параметров с помощью net.sf.oval (в рамках игры) - PullRequest
2 голосов
/ 19 декабря 2011

Я хотел бы использовать аннотацию @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;
    }
}

Когда я вызываю этот метод с нулевым параметром, if выдает мое исключение, но @NotNull и @Required, похоже, ничего не делают. Что я делаю неправильно? Проект Play Framework поставляется с овалом 1.5, я скачал 1.8 и добавил его в classpath в eclipse на случай, если у старого возникнут проблемы.

Я запускаю сервер с «play test my-server», а затем перехожу на свой веб-сайт (пока не тестовый, просто простой сайт) с помощью моего браузера.

Спасибо, Алекс

P.S. Я знаю обсуждение «ноль - зло», но у меня нет доступа к остальной части кода, поэтому я не могу это изменить.

Ответы [ 2 ]

1 голос
/ 10 декабря 2012

На случай, если это кому-то все еще нужно.

Вы можете выполнить проверку с помощью аннотаций Play во всех классах точно так же, как в контроллерах.Просто используйте validate plugin.

1 голос
/ 21 декабря 2011

Класс проверки вызывается для проверки аннотаций проверки платформой Play только при вызове действия контроллера.

Поскольку вы не находитесь в контроллере, проверка на аннотацию не будет выполнена иТребуемая аннотация не будет в Validation.hasErrors ()

Вместо использования аннотации вы можете использовать такие методы, как: Validation.required (redCode);// Он будет проверять наличие нуля И после этого вызывать Validation.hasErrors (), и он должен работать.

Однако я не думаю, что вам следует это делать, потому что ошибки из Validation.hasError () должныисходить из Validation при вызове действия контроллера, и это может вызвать у вас побочные эффекты.

Если вы хотите сделать что-то подобное вашему примеру, вам не следует полагаться на класс Play Validation.

Являетесь ли выуверен, что вы используете проверку в нужных местах?

...