Как я могу разместить проверки для полей в Groovy для конкретного формата - PullRequest
1 голос
/ 13 мая 2011

У меня есть класс Domain, и в этом для определенного поля типа String он принимает буквенно-цифровые значения, мне нужна проверка в формате, в котором он должен принимать только значения AB12-QW-1 (или) XY-12. Как я могу проверить поле.

Пожалуйста, предложите решение. Спасибо.

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Предположим, что ваш класс домена выглядит следующим образом

class Foo {
  String bar
}

Если вы можете определить регулярное выражение, которое соответствует только допустимым значениям, вы можете применить ограничение, используя:

class Foo {
  String bar
  constraints = {
    bar(matches:"PUT-YOUR-REGEX-HERE")
  }
}

В качестве альтернативы,если вы можете легко перечислить все допустимые значения, вы можете использовать:

class Foo {
  String bar
  constraints = {
    bar(inList:['AB12-QW-1', 'XY-12'])
  }
}

Если ни одно из этих решений не будет работать, то вам, вероятно, потребуется написать пользовательский метод проверки

1 голос
/ 13 мая 2011

Вы можете использовать пользовательский валидатор :

class YourDomain {
  String code

  static constraints = {
    code( validator: {
      if( !( it in [ 'AB12-QW-1', 'XY-12' ] ) ) return ['invalid.code']
    })
  }
}

Однако ваше объяснение того, какие коды действительны, немного расплывчато, так что вы, вероятно, хотите что-то еще вместо in вызова

[править]

Предполагая, что в двух ваших строках только что отображались заполнители для букв или цифр, следующий валидатор регулярных выражений должен работать:

constraints = {
  code( matches:'[A-Z]{2}[0-9]{2}-[A-Z]{2}-[0-9]|[A-Z]{2}-[0-9]{2}' )
}

И это вернет ошибку yourDomain.code.matches.invalid, если не получится

...