В моем собственном валидаторе уровня перед проверкой значения, которое я хочу знать, другие валидаторы отмечают его как действительный или нет?JSR303: Как проверить, что поле уже отмечено как недействительное?
Например, перед проверкой того, что страна существует в базе данных, мне нужно убедиться, что она проходит другие тесты, такие как допустимая длина и шаблон соответствия.
Как это сделать?
Для того, чтобы выяснить, что я действительно хочет, это реальный пример:
@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
перед тем проверки пароля и входа в систему, Мне нужно убедиться, что они действительны.
Мне очень жаль, что я не разместил реальный код. (См. Обновленный вопрос.) Я уже использовал 'groups' с' @ GroupSequence', и мне нужно проверить, проверяет ли он на других групповых проходах. –
Привет, без проблем! Я думаю, что в вашей аннотации @Validated вам необходимо передать групповую последовательность, которая определяет порядок между LoginChecks.class, PasswordChecks.class и FormChecks.class. Обычно с алгоритмом BV, определенным для групповой последовательности, ValidCredentialsValidator будет вызываться только в том случае, если пароль и логин действительны. – kevinpollet