Статьи

Не суетись! Нет, Мусс! Реализация валидации с использованием аннотаций JSR-303 весной

Каждый дизайнер и разработчик знает, что проверка пользовательского ввода   является важной частью разработки для любого приложения. С момента создания различных инфраструктур MVC, таких как Struts, Spring, JSF и т. Д., Метод реализации проверки был включен в соображения проектирования приложений. Эти структуры устанавливают стандарты для реализации валидации, предоставляя необходимые вспомогательные классы, и, безусловно, наличие чистого дизайна для валидации имеет свои преимущества в отношении обслуживания приложений.

До выпуска версии 3.0 в Spring для реализации проверки требовалось, чтобы класс валидатора был зарегистрирован с использованием XML-файла конфигурации Spring. Кроме того, разработчик должен был проверить поля и обеспечить регистрацию ошибок с помощью  ValidationUtils  в методе validate () класса validator. После введения аннотаций в Spring 3.0 реализация валидации стала проще и чище. Разработчики могут сократить объем кода, используя инфраструктуру Hibernate Validator вместе с Spring. На момент написания этой статьи последней версией Hibernate Validator Framework была версия 5.0, которая является эталонной реализацией JSR-303). Следующее иллюстрирует реализацию ограничений и проверки с использованием аннотаций JSR-303:

Зависимости JAR:  вам нужно поместить файлы JAR из Hibernate Validator Framework в путь к классу приложения, который называется WEB-INF / lib в   веб-проекте Java . Hibernate Validator 5.0 поставляется с различными JAR-файлами. Хотя некоторые из них являются необязательными, для реализации проверки необходимы следующие JAR-файлы.

hibernate-validator-5.1.0.Final

validation-api-1.1.0.Final

одноклассник-1.0.0

jboss-logging-3.1.3.GA

Свойства аннотации модели: как  только вы ввели вышеупомянутые JAR-файлы в classpath, вы можете использовать предоставленные ими аннотации. Ниже приведен пример класса модели, в котором вам необходимо аннотировать свойства с необходимыми ограничениями. Обратите внимание, как используются @Size и @NotEmpty.

 
public class Employee {
private String empId;
private String empName;
@NotEmpty @Size(max = 10)
}
private String designation;

Использование @Valid в аргументе метода контроллера.  Чтобы попросить Spring выполнить проверку полей модели (на основе указанных ограничений), необходимо использовать @Valid для атрибута модели в аргументе метода контроллера.

Предположим, что ваше представление было привязано к EmployeeController с использованием атрибута модели с именем «employee», представленного классом Employee. В этом случае, в дополнение к аннотации @ModelAttribute, вы должны аннотировать экземпляр класса Employee с помощью @Valid. Посмотрите, как это делается в следующем примере:

@Controller

 
public class EmployeeController {
@RequestMapping(value = "/addEmployee", method=RequestMethod.POST)
public String addEmployee(@ModelAttribute @Valid Employee employee, BindingResult bindingResult) {
if(bindingResult.hasErrors()) { return “employeeForm”; }
}
//Code to add new Employee into the database return “successView”; }

Поскольку мы аннотировали атрибут модели с помощью @Valid, Spring выполнит проверки и зарегистрирует ошибки в объекте BindingResult.

Как показано в примере выше, если объект bindingResult содержит ошибки, мы снова показываем форму ввода сотрудника. В противном случае будет отображаться successView. На странице JSP используйте тег Spring <form: errors> для отображения ошибок.

Пользовательские сообщения об ошибках:  По умолчанию Spring отображает сообщения об ошибках Hibernate Validator по умолчанию (из свойств сообщений Validator, которые включены в файл jar hibernate-validator-5.1.0.Final) в зависимости от типа указанного ограничения. Но часто мы обязаны показывать пользовательские сообщения. Мы можем сделать это, используя параметр «message» аннотации в классе модели. В следующем примере для ограничения NotEmpty мы укажем значение параметра «message», равное «Имя сотрудника не может быть пустым».

 
@NotEmpty(message=”Employee name can not be empty”)
private String empName;

Если ваше приложение поддерживает интернационализацию, вы также можете взять сообщение из файла ресурсов. Для этого значение параметра ‘message’ должно быть ключом файла свойств, окруженным {}. В приведенном ниже примере ключом сообщения является employee.name.empty.

 
@NotEmpty(message=”{employee.name.empty}”)
private String empName;

Здесь Spring попытается найти указанный ключ в стандартных файлах ресурсов Hibernate (ValidationMessage.properties). Чтобы попросить Spring найти сообщение из вашего собственного файла ресурсов, вам потребуется следующая запись в XML-файле конфигурации Spring (при условии, что конфигурация bean-компонента Spring выполняется через XML-файл конфигурации).

 
<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFac toryBean">
<property name="validationMessageSource" ref="messageSource" /> </bean>
<property name="basenames" value="com/example/i18n/messages”/>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
</bean>

Как видите, мы использовали LocalValidatorFactoryBean, чтобы указать нашу собственную реализацию messageSource. Теперь он будет читать сообщения из файла messages.properties, который является файлом ресурсов. Следует также отметить, что вам нужно указать значение атрибута ‘validator’ (который является компонентом класса LocalValidatorFactoryBean) в теге <mvc: annotation-drivern>.

Просто, правда? Выполните следующие шаги, и вы можете легко реализовать проверку с помощью ограничений JSR-303 и аннотаций проверки. Я думаю, вы согласитесь, что весна качается!

Хасан Сунасара : Кто любит проектировать, разрабатывать и настраивать  Java Enterprise Applications  . Я стремлюсь изучать новые вещи и улучшать все возможные области, затронутые на жизненном пути. Когда я не работаю на Java, я общаюсь, читаю блоги и смотрю фильмы.