是否有可能在控制台基于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(); 
    } 
} 

AB是:

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似乎有点笨拙的给我,我要替换它。请帮助:)

+0

A类和B类是控制器或服务或道层类或pojo? – 2012-07-24 15:18:57

+0

'A'和'B'都是简单的POJO。 – 2012-07-24 15:40:42

它看起来像你想在注入过程中验证你的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,能够它被设置后验证豆。