Как задать аннотацию Hibernate "@Pattern" с помощью регулярного выражения из файла .properties или базы данных

Situation: Я хочу выполнить Hibernate Validation на основе свойств пользователя (чтобы разрешить различные правила валидации для ввода на основе данных учетной записи пользователя) - я думаю, что должно быть возможно использовать файл . properties file to specify a particular regular expression, but I can't understand what is wrong:

Мой текущий метод указания регекса валидации извлекает этот регекс из константы в определенном файле интерфейса (чтобы держать все вместе) и вставляет его как константу в @Pattern() аннотацию для каждой переменной - например, для переменной . например, для переменной workPhone:

@Column(name = "WORK_PHONE")
@NotEmpty(message = "{ContactInfo.workPhone.notEmpty}")
@Pattern(regexp = PHONE_NUMBER_PATTERN_SL, message = "{ContactInfo.workPhone.regexp.msg}")
@Size(max = 10, message = "{ContactInfo.workPhone.size}")
protected String                workPhone;

... где regex хранится в static final String PHONE_NUMBER_PATTERN_SL и все {ContactInfo.workPhone...} вызовы приходят из . properties file:

ContactInfo.workPhone.notEmpty=Please enter your phone number.
ContactInfo.workPhone.regexp.msg=Invalid characters entered in phone. Use this format XXX-XXX-XXXX.
ContactInfo.workPhone.size=Phone can not be longer than 10 digits.

К сожалению, такое расположение делает шаблон валидации общеприкладным (скомпилированным), так как я не могу найти способ изменить его для другого пользователя в другой компании, месте, должности и т.д. Чтобы сделать возможной дифференциацию на основе этой информации, я хотел бы также хранить regex в файле свойств, и я пытаюсь включить его таким образом:

ContactInfo.workPhone.regexp=\d{3}-\d{3}-\d{4}

при включении ссылки в аннотацию из третьей строки в первом листинге кода:

@Pattern(regexp = "{ContactInfo.workPhone.regexp}", message = "{ContactInfo.workPhone.regexp.msg}")

Затем я бы поменял местами файлы свойств для разных случаев, например, чтобы разрешить/требовать не американский формат телефонного номера.

Question: Возможно ли сделать то, что я хочу? Есть ли лучший способ указать шаблон (который мог бы позволить даже вызов базы данных вместо файла свойств)?

Кроме того, я не лучший в этом (поскольку я перенимаю опыт у другого разработчика), поэтому если кто-то может просто указать мне на специализированный ресурс, касающийся использования аннотации @Pattern или другой разметки проверки Hibernate regex, то это может дать мне всю необходимую информацию.

TL;DR: Можно ли использовать динамически устанавливаемое или изменяемое значение для выражения, используемого в Hibernate Pattern Validation, вместо предопределенной и предварительно скомпилированной константы?

6
задан Code Jockey 26 January 2012 в 15:35
поделиться