Java 是否可以在基于Spring的控制台应用程序中使用@Valid注释?
我已使用Java 是否可以在基于Spring的控制台应用程序中使用@Valid注释?,java,spring,validation,Java,Spring,Validation,我已使用@Configuration注释类作为参数创建了AnnotationConfigApplicationContext: @Configuration class Config { @Bean public LocalValidatorFactoryBean localValidatorFactoryBean() { return new LocalValidatorFactoryBean(); } @Bean public A
@Configuration
注释类作为参数创建了AnnotationConfigApplicationContext
:
@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;
}
Q:在这种情况下,是否可以使Spring处理@有效的注释
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。
你可以阅读
以下是一个例子:
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);
}
}
公共类BeanValidator实现org.springframework.validation.Validator,初始化Bean{
私人验证器;
public void afterPropertieSet()引发异常{
ValidatorFactory=Validation.buildDefaultValidatorFactory();
validator=validatorFactory.usingContext().getValidator();
}
公共布尔支持(类clazz){
返回true;
}
公共无效验证(对象目标、错误){
Set constraintViolations=validator.validate(目标);
for(ConstraintViolation ConstraintViolation:constraintViolations){
String propertyPath=constraintViolation.getPropertyPath().toString();
String message=constraintViolation.getMessage();
错误。拒绝值(propertyPath,“,消息);
}
}
}
您将需要实现InitializingBean,以便在设置bean后能够对其进行验证。类A和B是控制器或服务或dao层类或pojo?A和B都是简单的pojo。