/ / Има ли стандартен начин за активиране на JSR 303 Bean Validation с помощта на анотирани аргументи на метода - java, spring, aop, bean-validation, хибернация

Има ли стандартен начин да се даде възможност на JSR 303 Bean Validation с помощта на анотирани методи аргументи - java, spring, aop, bean-validation, hibernate-validator

Изглеждах наоколо, без да имам късмет не използвате Spring MVC, но все пак искате да използвате @javax.validation.Valid за да разрешите валидиране на аргументи на метода. Да дадем пример

public class EventServiceImpl implements IEventService {
@Override
public void invite(@Valid Event event, @Valid User user) { ... }
}

Използвайки MVC, това е разрешено за @Controller анотирани зърна с прост <mvc:annotation-driven/> (виж 5.7.4.3 Конфигуриране на валидатор JSR-303 за използване от Spring MVC).

Използването на AOP трябва да бъде доста тривиално. Въпреки това, аз подозирам, че има някакъв стандартен начин да направите това.

Отговори:

6 за отговор № 1

Валидирането на ниво метод не е част от спецификацията за проверка на Bean (JSR 303). Валидирането на ниво метод е предложение в добавената спецификация приложение С.

Валидатор за хибернация 4.2 (бета вече е излязла) прилага това предложение и позволява да се поставят анотации JSR 303 върху параметрите на метода и връщаните стойности. Разбира се, все още ще се нуждаете от пролетен код за лепило, но това не трябва да бъде твърде трудно.

Също така Bean Validation 1.1 ще добави официално валидиране на ниво метод към спецификацията (не само като допълнение / препоръка). Вижте също http://beanvalidation.org/


3 за отговор № 2

Използвайки MVC, това е разрешено за @Controller анотирани зърна

@Valid е само маркер в боб на контролера, който скрива кода, който извършва проверката, и поставя всички нарушения на ограниченията в Errors по хубав начин. Пролетните дизайнери биха могли да измислят собствена анотация, за да направят същото.

Истинското използване на @Valid анотация е в класа(bean), който потвърждавате с валидатора JSR 303 и неговата основна употреба е да проверите графиката на обекта. Значението на един боб може да има друг препращания към бина с @Valid анотация за рекурсивно задействане на валидирането.

Извън MVC можете да използвате конфигуриран валидатор, за да потвърдите всеки компонент, който използва анотации JSR 303, но за разлика от добре запълнените Errors в контролера, ще трябва да решите сами какво ще правите с нарушения на ограниченията.

Така че, за да отговорим на въпроса ви, няма стандартначин. За да имате същия вид като в контролер, можете да използвате @Valid анотация (или да създадете нова), за да изпълните AOP съвет, за да потвърдите бина и да попълните "ViolationCollector" (нещо като грешки в MVC), които трябва да се предадат метод.