Как мы можем добавить некоторые общие ограничения (т. Е. MaxLength, nullable) к свойству класса Groovy? Я знаю, что мы можем сделать это в классе домена Grails, но возможно ли, что это класс Groovy (я использую его как класс DTO для моего проекта Grails)?
Большое вам спасибо!Добавить ограничения для свойств класса Groovy (не класс класса Grails!)
ответ
Вы можете добавить ограничения для классов команд. Если командный класс находится в том же файле .groovy, что и контроллер (в Groovy вы можете иметь более одного открытого класса в каждом файле .groovy), вам не нужно делать ничего особенного для Grails, чтобы его использовать как командный класс ,
Однако, если ваш класс команды где-то еще (например, под SRC/заводной), вам нужно аннотировать его с @Validateable
и добавить имя пакета к параметру grails.validateable.packages
в Config.groovy
. Вот пример команды, это не в том же файле в качестве контроллера
pacakge com.example.command
@Validateable
class Person {
Integer age
String name
static constraints = {
name(blank: false)
age(size 0..100)
}
}
Добавьте следующие Config.groovy
grails.validateable.packages = ['com.example.command']
классов команды, имеют validate()
метод добавленной Grails. После вызова этого метода любые ошибки будут доступны в свойстве errors
(согласно классам домена).
Для модульного тестирования вы может затем использовать @TestMixin (ControllerUnitTestMixin) и mockForConstraintsTests. Это отличается от типичной аннотации @TestFor, которую вы будете использовать с объектами домена. –
Использование grails Command Object, вероятно, лучший выбор. Он имеет ограничения и проверки, но не поддерживает базу данных. Обычно это объект ценности, который используют контроллеры, но вы можете создать экземпляр вне контроллера без каких-либо проблем.
Не уверен, что это относится к вашему использованию (я не знаком с DTO), но в текущей версии (2.3.8) вы также можете добавить ограничения Grails к абстрактному классу, и они будут унаследованы домены, которые его расширяют. Возможно, вам не понравилась ваша IDE;)
Аналогичный вопрос: http://stackoverflow.com/questions/4448556/grails-validateable-not-work-for-non-persistent-domain-class –