我有一个控制器方法,它接收一个命令对象,其中包含一个注释用于验证的对象列表。但是,应该忽略完全空的项目,因此我不能在控制器方法头中使用@Valid
,因为它会为所有列表项的所有字段生成错误。
我想从列表中删除空行并在之后调用Spring验证器。我怎么能这样做?
这是一个Spring Boot项目。
答案 0 :(得分:2)
这是如何在没有@valid注释的情况下进行验证的春季示例:
Foo target = new Foo();
DataBinder binder = new DataBinder(target);
binder.setValidator(new FooValidator());
绑定到目标对象
binder.bind(propertyValues);
验证目标对象
binder.validate();
获取包含任何验证错误的BindingResult
BindingResult results = binder.getBindingResult();
答案 1 :(得分:2)
可能是迟到了。但它可以帮助其他人。
实际上,您需要在上下文中LocalValidatorFactoryBean
显式调用验证程序。在你的任何环境中,你可以像bean那样去掉豆子。
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"/>
</bean>
在您的控制器Autowire
中,bean明确调用validate()
方法
@Autowired
private Validator validator;
@Autowired
private MyCustomValidator customValidator;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.addValidators(smartValidator, customValidator);
}
public String save(@ModelAttribute FooModel foo, BindingResult result) {
// ... your cutom logic and processing
validator.validate(foo, bindingResult);
customValidator.validate(foo, bindingResult);
if (result.hasErrors()) {
// ... on any validation errors
}
return "view";
}
您可以通过this了解有关此方案的更多信息