В моем собственном валидаторе уровня класса перед проверкой значения я хочу знать, другие валидаторы помечают его как действительный или нет?
Например, перед проверкой того, что эта страна существует в базе данных, я должен убедиться, что она проходит другие тесты, такие как допустимая длина и шаблон соответствия.
Как это сделать?
Чтобы уточнить, чего я действительно хочу, это пример из реальной жизни:
@ValidCredentials(groups = AuthAccountForm.FormChecks.class)
public class AuthAccountForm {
@NotEmpty(groups = Login1Checks.class)
@Size.List({
@Size(min = LOGIN_MIN_LENGTH, message = "{value.too-short}", groups = Login2Checks.class),
@Size(max = LOGIN_MAX_LENGTH, message = "{value.too-long}", groups = Login2Checks.class)
})
@Pattern(regexp = LOGIN_REGEXP, message = "{login.invalid}", groups = Login3Checks.class)
private String login;
@NotEmpty(groups = Password1Checks.class)
@Size(min = PASSWORD_MIN_LENGTH, message = "{value.too-short}", groups = Password2Checks.class)
@Pattern(
regexp = PASSWORD_REGEXP,
message = "{password.invalid}",
groups = Password3Checks.class
)
private String password;
@GroupSequence({ Login1Checks.class, Login2Checks.class, Login3Checks.class })
public interface LoginChecks { }
public interface Login1Checks { }
public interface Login2Checks { }
public interface Login3Checks { }
@GroupSequence({ Password1Checks.class, Password2Checks.class, Password3Checks.class })
public interface PasswordChecks { }
public interface Password1Checks { }
public interface Password2Checks { }
public interface Password3Checks { }
public interface FormChecks { }
}
А в контроллере:
@RequestMapping(method = RequestMethod.POST)
public String processInput(
@Validated({
LoginChecks.class,
PasswordChecks.class,
FormChecks.class
}) final AuthAccountForm form,
final BindingResult result) {
Итак, теперь в ValidCredentialsValidator
перед проверкой пароля и входа в систему мне нужно убедиться, что они действительны.