Методы validate, validateProperty и validateValue используются соответственно для валидации целого компонента, свойства или свойства при заданном значении. Все методы принимают параметр varargs, позволяющий указывать группы для валидации. Метод forExecutables предоставляет доступ к ExecutableValidator для валидации методов, параметров конструктора и валидации возвращаемого значения. В табл. 3.5 описан API ExecutableValidator.
Метод | Описание |
---|---|
<T> Set<ConstraintViolation<T>>validateParameters(T object, Method | Валидирует все ограничения, применяемые с параметрами метода |
method, Object[] params, Class<?>… groups) | |
<T> Set<ConstraintViolation<T>>validateReturnValue(T object, Method method, Object returnValue, Class<?>… groups) | Валидирует все ограничения возвращаемого значения, применяемые с методом |
<T> Set<ConstraintViolation<T>>validateConstructorParameters (Constructor<T> constructor, Object[] params, Class<?>… groups) | Валидирует все ограничения, связанные с параметрами конструктора |
<T> Set<ConstraintViolation<T>>validateConstructorReturnValue (Constructor<T> constructor, T createdObject, Class<?>… groups) | Валидирует все ограничения возвращаемых значений, связанные с конструктором |
Все валидационные методы, перечисленные в табл. 3.4 и 3.5, возвращают множество ConstraintViolation, которое можно перебирать и при этом просматривать, какие ошибки возникли при валидации. Если это множество пустое — значит, валидация прошла успешно. При ошибках в это множество добавляется по экземпляру ConstraintViolation для каждого нарушенного ограничения. ConstraintViolation описывает единую ошибку, связанную с ограничением, а его API дает множество полезной информации о причине ошибки. В табл. 3.6 сделан обзор этого API.
Метод | Описание |
---|---|
String getMessage() | Возвращает интерполированное сообщение об ошибке для данного нарушения |
String getMessageTemplate() | Возвращает неинтерполированное сообщение об ошибке |
T getRootBean() | Возвращает корневой компонент, участвующий в валидации |
Class<T> getRootBeanClass() | Возвращает класс корневого компонента, участвующего в валидации |
Object getLeafBean() | Возвращает дочерний компонент, к которому применяется ограничение |
Path getPropertyPath() | Возвращает путь свойств к значению от корневого компонента |
Object getInvalidValue() | Возвращает значение, которое не соответствует заданному ограничению |
ConstraintDescriptor<?> getConstraintDescriptor() | Возвращает метаданные об ограничении |
Первый этап валидации компонента — приобрести экземпляр интерфейса Validator. Как и в большинстве спецификаций Java EE, вы можете либо получить Validator программно (если ваш код выполняется вне контейнера), либо внедрить его (если код выполняется в EJB- или веб-контейнере).
Если вы делаете это программно, то необходимо начать с класса Validation, осуществляющего начальную загрузку поставщика валидации компонентов. Его метод buildDefaultValidatorFactory строит и возвращает фабрику ValidatorFactory, которая, в свою очередь, используется для построения Validator. Код выглядит следующим образом:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Затем вам придется управлять жизненным циклом ValidatorFactory и программно закрывать его:
factory.close();
Если ваше приложение работает в контейнере Java EE, то контейнер должен предоставлять через JNDI следующие экземпляры:
• ValidatorFactory под java: comp/ValidatorFactory;