Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在基于Spring的控制台应用程序中使用@Valid注释?_Java_Spring_Validation - Fatal编程技术网

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。