Насколько я знаю, в JEE7 Bean Validation автоматически интегрируется с CDI. Например, если я использую контейнер CDI, мне не нужно вводить и использовать javax.validation.Validator, чтобы проверить, нарушает ли мой компонент какой-либо ограничение. Таким образом, мне не нужно делать что-то вроде этого:Переопределить или отключить интеграцию CDI с верификацией Bean
@Inject
Validator validator;
...
SoccerPlayer player = new SoccerPlayer();
player.setFirstName(firstName);
player.setLastName(lastName);
player.setAge(age);
Set<ConstraintViolation<SoccerPlayer>> violations = validator
.validate(player);
Но следующий SoccerPlayer боб
public class SoccerPlayer {
@NotNull
@Size(min = 5)
private String firstName;
@NotNull
@Size(min = 5)
private String lastName;
@Max(50)
@Min(value=16, groups = GoalKeeper.class)
private int age;
private String position;
public SoccerPlayer() {
}
// Getters and setters omitted
}
может автоматически проверки с @Valid аннотацию.
public class SoccerPlayerProcessor {
public void processPlayer(@Valid SoccerPlayer player){
// Do stuff with the player.
}
}
Теперь в этом случае я не могу использовать группы в сочетании с аннотацией @Valid, чтобы разнообразить поведение проверки.
Итак, есть ли какой-либо метод для достижения моей цели? Или как альтернатива, могу ли я отключить интеграцию CDI с проверкой bean? Могу ли я переопределить стандартный CDI javax.validation.Validator с моей пользовательской реализацией?
Я использую профиль WebSphere Liberty в качестве сервера приложений.
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Чтобы быть более точным, это выдержка из: https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/validator-integration.html#section-integration-with-cdi
В версии 1.1, Бин Проверка интегрирована с CDI (контексты и Dependency Injection для JavaTM EE).
Эта интеграция обеспечивает КДИ управляемые компоненты для валидатора и ValidatorFactory и позволяет инъекции зависимостей в ограничении валидаторов, а также интерполяторы пользовательских сообщений, проходимые арбитров, скованность валидатор фабрику и имя параметра провайдеров.
Кроме того, ограничения параметров и возвращаемых значений для методов и конструкторы управляемых бинов CDI будут автоматически проверяться по вызову .
Когда приложение работает в контейнере Jave EE, эта интеграция включена по умолчанию.
Мой вопрос: есть ли способ отключить это поведение по умолчанию? Или, альтернативно, я могу переопределить перехватчик CDI по умолчанию? Или это невозможно?
Что вы подразумеваете под «Я не могу использовать группы в сочетании с' @ Valid' annotation "? – Rouliboy
Я имею в виду, если я хотел бы проверить SoccerPlayer с группой GoalKeeper.class? AFAIK Я не могу сделать что-то вроде @Valid (groups = GoalKeeper.class). Если бы я мог переопределить валидатор по умолчанию, я мог бы аннотировать мой API с помощью специальной аннотации (например, Validate, у которой есть поле group @Validate (groups = GoalKeeper.class)), и в Validator я мог собрать все компоненты, аннотированные с ним, и выполнить проверку с помощью определенной группы. – mancioshell