Валидатор Гибернации. Как работать с аннотацией @Valid?
какова цель @Valid
аннотация при размещении на уровне параметров метода?
public void (@Valid Person p) { ... }
Я создал тест и передал этому методу недопустимый объект, но ничего не происходит.
Я ожидаю получить исключение.
2 ответов
в @Valid
аннотация на объекте является указанием на структуру проверки для обработки аннотированного объекта. При использовании параметра метода это называется метод проверки уровня. Обратите внимание, что проверка уровня метода не часть основной спецификации и фактически поддерживается только тогда, когда проверка Bean интегрирована в структуру типа контейнера (JSF, CDI, Java EE). Когда проверка Bean интегрированный в такой поддерживающий контейнер, происходит то, что, поскольку методы жизненного цикла вызываются на bean, контейнер обнаруживает аннотации JSR 303 на параметрах методов и запускает проверку связанного bean.
так, например, если у вас было следующее определение метода в классе ресурсов JAX-RS:
@Path("/example")
public class MyExampleResourceImpl {
@POST
@Path("/")
public Response postExample(@Valid final Example example) {
// ....
}
}
когда postExample
метод вызывается в ответ на запрос, обрабатываемый контейнером JAX-RS,example
bean будет проверен. Сравните это поведение с тем, что произойдет, если вы используете автономное приложение Java SE:
public class MyMainClass {
public static void main(final String[] args) {
final MyMainClass clazz = new MyMainClass();
clazz.echo(new Example());
}
public Example echo(@Valid final Example example) {
// ...
}
}
в этом случае запуск программы будет не проверка курок Example
параметр, даже если вы включили все JSR 303 runtime JARs. Это связано с тем, что нет контейнера, который реализует проверку уровня метода. The Спецификация Проверки Фасоли описывает все это в некоторых деталях в приложении C. я процитировал некоторые из них ниже для вашей пользы:
предложение для проверки на уровне метода
это предложение не было интегрировано в основную спецификацию и не является частью этого. Он остается здесь для археологических целей и будет серьезно рассмотрен для будущего пересмотра этого спецификация. Это предложение, вероятно, будет немного не синхронизировано с остальные артефакты спецификации.
Примечание: поставщики проверки Bean могут реализовать это предложение как конкретное расширение. Например, можно получить доступ к такому конкретному расширению с помощью валидатора.Unwrap метод.
популярным требованием было предоставить метод и проверку уровня параметров механизм повторного использования описаний ограничений спецификации. Этот набор API предназначен для использования фреймворками перехватчиков, такими как:
- фреймворки, такие как
- JSR-299
- компонентные фреймворки, такие как Enterprise Java Beans
- аспект основ
эти фреймворки могут вызывать API проверки для проверка списка параметров или возвращаемого значения метода когда такой метод вызывается. Точнее, проверка происходит вокруг вызов метода. Это расширение API проверки компонентов позволяет повторное использование ядра ядра, а также определение ограничений и объявление для таких проверок уровня метода.
его целью является проверка объекта на соответствие определенным ограничениям.
выполняет проверку рекурсивно для связанного объекта. Если объект представляет собой коллекцию или массив, элементы проверяются рекурсивно. Если объект является картой, элементы value проверяются рекурсивно.
Это может помочь http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/