據我所知,在JEE7 Bean驗證自動與CDI集成。 例如,如果我使用CDI容器,我不需要注入並使用javax.validation.Validator來檢查我的bean是否違反了某些約束。 所以,我不需要做這樣的事情:覆蓋或禁用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概要文件作爲應用程序服務器。
預先感謝您。
EDIT:
作爲版本1.1,Bean驗證集成有CDI(上下文 和依賴注入的JavaTM EE )。
這種集成提供了CDI管理豆驗證和 ValidatorFactory,使依賴注入在約束 驗證以及自定義消息插值,穿越 解析器,約束驗證工廠和參數名稱 提供商。
此外,在調用 時,將自動驗證CDI託管bean的構造函數的方法和 上的參數和返回值約束。
當您的應用程序在Jave EE容器上運行時,默認情況下啓用此集成。
我的問題是,是否有任何方法來禁用此默認行爲?或者可以替代我可以重寫默認的CDI攔截器?或者是不可能的?
你是什麼意思?「我不能使用組合與@ @ Valid'註解」? – Rouliboy
我的意思是如果我想用GoalKeeper.class組驗證SoccerPlayer呢? AFAIK我不能做像@Valid(groups = GoalKeeper.class)。如果我可以重寫默認的驗證器,我可以使用自定義註釋(例如Validate,其中包含組字段@Validate(groups = GoalKeeper.class))對我的API進行註釋,並且在驗證程序中我可以收集所有使用它註釋的bean並執行驗證特定組。 – mancioshell