我有一个要验证的表格。它包含 2 个地址变量。必须始终验证地址 1,必须根据某些条件验证地址 2
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
我的控制器自动验证并绑定我的表单 obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
问题是,如果我使用 LocalValidatorFactoryBean 验证器,我将无法重用 Spring 提供的 BinidingResult 对象。绑定不起作用,因为“结果”的目标对象是“MyForm”而不是“地址”
validate(form.getAddress2(), bindingResult) //won't work
我想知道进行条件验证的标准/干净方法是什么。
我正在考虑以编程方式在我的控制器中创建一个新的 BindingResult 。
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
但是我从 bindingResultAddress2 获得的错误列表无法添加到一般的“bindingResult”,因为字段名称不正确(“street”而不是“address2.street”)并且绑定不起作用。
一些肮脏的方法是扩展 BeanPropertyBindingResult 以接受一些字符串附加到字段名称..你有更好的方法吗?