0

次のように、休止状態の検証アノテーションフレームワークを使用してドメインクラスを検証し、@Validアノテーションを使用してドメインオブジェクトを検証しています。

@RequestMapping(method = RequestMethod.POST)
    public String post(@Valid @ModelAttribute("person") Person person,BindingResult errors) {...}

そして、電子メールがデータベースに存在するかどうかをチェックするようなカスタム検証を行いたいかどうか疑問に思いました

私が今していることは、ドメインにプロパティを持つことです:

@AssertFalse(message = "{email.missmatch}")
private boolean emailExist;

そして私はそれをpostメソッドで設定しました:

person.setEmailExist(personDao.isEmailExist(person.getEmail()));

上記はカスタム休止状態のバリデータークラスで動作していました私はドメインを検証する必要があり、プロパティを設定した後にバリデーターを呼び出していました

しかし、@ Validを使用すると、プロパティを設定する前にバリデーターが呼び出されます

それで、この場合に@Validを使用する解決策はありますか?または、機能しません。機能しない場合は、@ Validを使用する代わりに、この場合はドメインクラスを検証する方法を教えてください。何を使用しますか?

前もって感謝します。

4

2 に答える 2

0

yor complet独自のバリデーターを作成できるため、tbatマーカープロパティを使用した「ハック」は必要ありません。このようなカスタム検証を作成する方法は、jsr303BeanValidation-仕様に記載されています。それのためのグーグル、あなたはまた例でたくさんのブログを見つけるでしょう。

于 2011-09-13T21:16:49.340 に答える
0

カスタムjavaxバリデーターを使用しました:

Validator validator = Validation.buildDefaultValidatorFactory()
                .getValidator();
        Set<ConstraintViolation<Person>> cvs = validator.validate(person);
        for (ConstraintViolation<Person> cv : cvs) {
            String field = cv.getPropertyPath().toString();
            errors.addError(new FieldError("person", field, cv.getMessage()));
        }

そしてそれはうまくいきました。

于 2011-09-14T12:43:36.133 に答える