有沒有一種簡單的方法讓Spring bean使用JSR-303註釋驗證上下文啓動?我已經繼承了一些表示配置爲JSR-303註釋的POJO的類。這些都是在對象層次結構中傳遞的,所以我有點被卡住了。JSR-303關於Spring Bean屬性的註釋
我可以想象定義bean設置這樣的類的屬性,然後在上下文啓動時運行JSR-303驗證程序,以確保所有值都設置正確。
請注意,我是而不是詢問Spring MVC中綁定表單提交的驗證。
有沒有一種簡單的方法讓Spring bean使用JSR-303註釋驗證上下文啓動?我已經繼承了一些表示配置爲JSR-303註釋的POJO的類。這些都是在對象層次結構中傳遞的,所以我有點被卡住了。JSR-303關於Spring Bean屬性的註釋
我可以想象定義bean設置這樣的類的屬性,然後在上下文啓動時運行JSR-303驗證程序,以確保所有值都設置正確。
請注意,我是而不是詢問Spring MVC中綁定表單提交的驗證。
簡短的回答是沒有。雖然最初並未在JSR-303中提到,但它通常用於MVC數據綁定和驗證。我會嘗試以下。
由於您有JSR-303註釋,因此請配置JSR-303 validator in Spring context。在這種情況下,它將是引導標準JSR-303驗證機制的LocalValidatorFactoryBean
。請注意,您仍然需要在您的類路徑中提供JSR-303的供應商/實現者(例如Hibernate Validator)。
當應用程序上下文啓動並準備就緒時,實現ApplicationContextListener<ContextStartedEvent>
的實例以接收事件。此外,允許的豆得到的LocalValidatorFactoryBean
一個實例:
public class GenericApplicationValidator implements ApplicationListener<ContextStartedEvent> {
private ValidatorFactoryBean validatorFactoryBean;
public void onApplicationEvent(ContextStartedEvent e) {
// Refer to next step
}
public void setValidatorFactoryBean(ValidatorFactoryBean vfb) {
this.validatorFactoryBean = vfb;
}
}
在該方法onApplicationEvent(ContextStartedEvent e)
:
validatorFactoryBean.getValidator()
請記住,我還沒有這樣做的經驗。但它在我看來可能是一種接近實現你所需要的方法。
如果你只想上下文初始化後,要做到這一點的驗證,你可以這樣做:
@Component
public class MyValidator ApplicationListener<ContextRefreshedEvent> {
@Autowired private ListableBeanFactory bf;
@Autowired private Validator validator;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
for (String name : bf.getBeanDefinitionNames()) {
Object bean = bf.getBean(name);
validator.validate(bean);
}
}
}
但我沒有測試它。
這種方法適用於我。 – user871611 2017-01-09 08:30:01
發佈一些代碼,我們可以幫您 – 2012-07-19 08:16:48