在Spring MVC之外手动调用Spring Annotation验证

时间:2016-07-13 17:15:04

标签: spring hibernate-validator spring-validator

我有以下测试失败:

 @Test
 public void testValidation() {
    Validator validator = new LocalValidatorFactoryBean();
    Map<String, String> map = new HashMap<String, String>();
    MapBindingResult errors = new MapBindingResult(map, Foo.class.getName());

    Foo foo = new Foo();
    foo.setBar("ba");
    validator.validate(foo, errors);
    assertTrue(errors.hasFieldErrors());
 }

Foo如下:

import javax.validation.constraints.Size;
public class Foo {
    @Size(min=9, max=9)
    private String bar;

    // ... public setter and getter for bar
}

我引用了Manually call Spring Annotation ValidationUsing Spring Validator outside of the context of Spring MVC,但我不确定为什么此测试失败。

1 个答案:

答案 0 :(得分:2)

您正在尝试使用实际上在其外部的Spring ApplicationContext内使用的bean。要准备使用它,您还必须模仿ApplicationContext关于对象初始化的行为。

LocalValidatorFactoryBean实现InitializingBean接口。其中包含一个方法,一旦构造了对象并且注入了所有依赖项,ApplicationContext通常会调用该方法(与使用@PostConstruct注释的方法相同)。

当您在ApplicationContext之外使用bean时,您必须手动调用afterPropertiesSet方法,然后才能使用该对象。