Вы не можете сделать это с помощью пользовательского валидатора. Это не совсем то, для чего это было предназначено. Из справочника Grails :
Закрытие может вернуться:
null
или true
, чтобы указать, что значение действительно
false
, чтобы указать недопустимое значение и использовать код сообщения по умолчанию
- строка, указывающая код ошибки, добавляемый к «classname.propertName». строка, используемая для разрешения сообщения об ошибке. Если сообщение, специфичное для поля, не может быть разрешено, сам код ошибки будет разрешен с учетом глобальных сообщений об ошибках.
- список, содержащий строку, как указано выше, а затем любое количество аргументов, следующих за ней, которые можно использовать в качестве аргументов форматированного сообщения, индексированных с 3 и более. См.
grails-app/i18n/message.properties
, чтобы увидеть, как коды сообщений об ошибках по умолчанию используют аргументы.
Альтернативой может быть просто создание метода службы, который 1) ищет домен и возвращает его, если он существует, 2) в противном случае сохраняет домен и возвращает его.
Возможно, есть более элегантная альтернатива. Несмотря на это, механизм ограничений Grails не способен (и не должен) быть способен на это.