有一个表格有时需要电话号码,有时则不需要,表格会通过验证员类别进行验证。我希望验证器类知道何时需要该字段以及何时它是空的,但是我不确定实现它的正确方法。控制器和验证过程如下所示:
@RequestMapping(value = "my/url", method = RequestMethod.POST)
public ModelAndView someMethod(@Valid T myForm, BindingResult bindingResult) {
//Calling the validation...
if (bindingResult.hasErrors()) {
// didn't pass validation
} else {
// is ok!
}
}
表单看起来像这样。这个想法是我可以添加另一个字段来确定是否需要电话号码,如果我在以后验证电话字段时找到了使用它的方法。它有@Phone注释:
public class MyForm implements Serializable {
private static final long serialVersionUID = 1L;
@Phone
private String phone;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
@Phone注释指定将验证数据的类
@Target({CONSTRUCTOR, FIELD, METHOD, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = ValidateField.class)
public @interface Phone {
String message() default "{default.phone.errormsg}";
int maxLength() default 64;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
以下是问题的起点。验证数据的类看起来像这样,我希望能够在这种形式下检查这次是否需要电话,但是我没有看到任何方式通过其他表单字段除了电话号码值之外的这个类,我无论如何都无法访问表单对象:
public class PhoneValidator implements ConstraintValidator<Phone, String> {
//...
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// I want to check if the "required" field was passed from form here
// to know if it's ok for the field to be empty
if (StringUtils.isEmpty(value) /* && isNotRequired */) {
return true;
}
return notBlank(value, context)
&& maxLength(value, context, maxLength) /* and other constraints... */;
}
//...
}
我是新的Spring验证资料,我甚至不确定我是否朝着正确的方向前进,如果有人能指导我找到解决这个问题的正确方法,我会感激不尽。