1

我有以下失败的测试:

 @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());
 }

富如下:

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

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

我已经在 Spring MVC 的上下文之外引用了Manually call Spring Annotation Validation和Using Spring Validator,但我不确定为什么这个测试会失败。

4

1 回答 1

2

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

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

当您在外部使用 bean 时,ApplicationContext您必须afterPropertiesSet在对象实际准备好使用之前手动调用该方法。

于 2016-07-15T05:44:09.543 回答