在 Spring MVC 之外手动调用 Spring 注释验证
Manually call Spring Annotation Validation Outside of Spring MVC
我有以下测试失败:
@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 and Using Spring Validator outside of the context of Spring MVC 但我不确定为什么这个测试失败了。
您正在尝试使用一个实际上要在 Spring ApplicationContext
内部使用的 bean。要准备使用它,您还必须模仿 ApplicationContext
在对象初始化方面的行为。
LocalValidatorFactoryBean
implements the InitializingBean
界面。它包含一个方法,一旦对象被构建并且所有依赖项都被注入后,ApplicationContext
通常会调用该方法(与用 @PostConstruct
注释的方法相同)。
当您在 ApplicationContext
外部使用 bean 时,您必须在对象实际准备好使用之前手动调用 afterPropertiesSet
方法。
我有以下测试失败:
@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 and Using Spring Validator outside of the context of Spring MVC 但我不确定为什么这个测试失败了。
您正在尝试使用一个实际上要在 Spring ApplicationContext
内部使用的 bean。要准备使用它,您还必须模仿 ApplicationContext
在对象初始化方面的行为。
LocalValidatorFactoryBean
implements the InitializingBean
界面。它包含一个方法,一旦对象被构建并且所有依赖项都被注入后,ApplicationContext
通常会调用该方法(与用 @PostConstruct
注释的方法相同)。
当您在 ApplicationContext
外部使用 bean 时,您必须在对象实际准备好使用之前手动调用 afterPropertiesSet
方法。