我有以下测试失败:
@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 Validation和Using Spring Validator outside of the context of Spring MVC,但我不确定为什么此测试失败。
答案 0 :(得分:2)
您正在尝试使用实际上在其外部的Spring ApplicationContext
内使用的bean。要准备使用它,您还必须模仿ApplicationContext
关于对象初始化的行为。
LocalValidatorFactoryBean
实现InitializingBean
接口。其中包含一个方法,一旦构造了对象并且注入了所有依赖项,ApplicationContext
通常会调用该方法(与使用@PostConstruct
注释的方法相同)。
当您在ApplicationContext
之外使用bean时,您必须手动调用afterPropertiesSet
方法,然后才能使用该对象。