3

を持っていて、 usingをConstraintValidatorContext構築している場合、カスタムパラメータ値を渡す可能性はありますか?ConstraintViolationContextBuilderbuildConstraintViolationWithTemplate(String messageTemplate)

対応するプロパティファイルは、次のようになります。

Foobar.invalidValue.message=Invalid value. Valid values are {VALID_VALUES}

次に、プログラムでの値を設定したいと思います{VALID_VALUES}

あなたはなにか考えはありますか?

4

2 に答える 2

3

メッセージテンプレート内で関連する制約アノテーションの属性のみを参照できます。たとえば、属性minmax:を持つ制約の場合などです。

size must be between {min} and {max}

したがって、有効な値を注釈属性として指定できます。

BeanValidationプロバイダーとしてHibernateValidatorを使用している場合は、値のキーを持つバンドルを返すカスタムResourceBundleLocatorを実装できます。

public class MyResourceBundleLocator implements ResourceBundleLocator {

    public ResourceBundle getResourceBundle(Locale locale) {
        //return a bundle with keys for your values, e.g. set dynamically
    }
}

次に、バリデーターを取得するときにロケーターを設定します。

Validator validator Validation.byProvider(HibernateValidator.class)
    .configure()
    .messageInterpolator(
        new ResourceBundleMessageInterpolator(
            new MyResourceBundleLocator() ) )
    .buildValidatorFactory()
    .getValidator();

または、メッセージを自分でフォーマットして準備し、に渡すこともできますbuildConstraintViolationWithTemplate()

于 2012-11-29T23:57:21.257 に答える
0

パラメータ化されたエラーメッセージを使用してカスタマイズされた制約アノテーションを許可するソリューションを見つけました。詳細については、この質問を参照してください:javax.validation.constraints.Patternアノテーションのパラメータ化されたエラーメッセージ?

于 2014-09-04T19:20:38.507 に答える