是否有可能在控制台基于Spring的应用程序中使用@Valid注释?
问题描述:
我已经AnnotationConfigApplicationContext
与@Configuration
注解的类创建为PARAM:是否有可能在控制台基于Spring的应用程序中使用@Valid注释?
@Configuration
class Config {
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean() {
return new LocalValidatorFactoryBean();
}
@Bean
public A aBean() {
return new A();
}
@Bean
public B aBean() {
return new B();
}
}
凡A
和B
是:
class A {
@Min(1)
public int myInt;
}
class B {
@Autowire(required = true)
@Valid
public A aBean;
}
问:是否有可能让Spring来处理@Valid
注释在此案件?
PS:目前,我有以下的B
工作落实:
class B {
public A aBean;
public void setABean(A aBean, Validator validator) {
if (validator.validate(aBean).size() > 0) {
throw new ValidationException();
}
this.aBean = aBean;
}
}
这IMPL似乎有点笨拙的给我,我要替换它。请帮助:)
答
它看起来像你想在注入过程中验证你的bean。 您可以阅读 here.
下面是一个例子:
public class BeanValidator implements org.springframework.validation.Validator, InitializingBean {
private Validator validator;
public void afterPropertiesSet() throws Exception {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.usingContext().getValidator();
}
public boolean supports(Class clazz) {
return true;
}
public void validate(Object target, Errors errors) {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(target);
for (ConstraintViolation<Object> constraintViolation : constraintViolations) {
String propertyPath = constraintViolation.getPropertyPath().toString();
String message = constraintViolation.getMessage();
errors.rejectValue(propertyPath, "", message);
}
}
}
您将需要实现的InitializingBean,能够它被设置后验证豆。
A类和B类是控制器或服务或道层类或pojo? – 2012-07-24 15:18:57
'A'和'B'都是简单的POJO。 – 2012-07-24 15:40:42