自分のクラスレベルのバリデーターで、値をチェックする前に他のバリデーターが有効であるかどうかを確認したいのですか?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
で、私はそれらが有効であることを保証する必要があります。
本当のコードを掲載していないことは大変残念です。 (更新された質問を参照してください)私はすでに '@GroupSequence'で' groups'を使っていますので、他のグループのシーケンスでそのチェックをテストする必要があります。 –
こんにちは、問題ありません!あなたの@Validatedアノテーションでは、LoginChecks.class、PasswordChecks.class、FormChecks.classの間で順序を定義するグループシーケンスを渡さなければならないと思います。通常、グループシーケンスValidCredentialsValidatorに対して定義されたBVアルゴリズムは、パスワードとログインが有効な場合にのみ呼び出されます。 – kevinpollet