1

アノテーション自体でそのようなメッセージ テンプレートがまだ定義されていない場合、(JPA エンティティで) 制約用のデフォルト メッセージ テンプレートを生成するにはどうすればよいでしょうか。

これが私の言いたいことです。JPAエンティティ「ダミー」があるとします。

@Entity
public class Dummy {
    @Column
    @NotNull
    Long id;
}

また、次を含む ValidationMessages.properties ファイルがあるとします。

Dummy.id.NotNull=ID of dummy should not be null

ここで、@NotNull 制約を @NotNull(message={Dummy.id.NotNull}) として定義した場合はすべてうまく機能しますが、「{Dummy.id.NotNull}」テンプレートをその場で生成したい場合はどうでしょうか。 (リフレクションを使用して)すべての制約に対して同じ標準化されたテンプレートを記述する必要はありませんか?MessageInterpolator クラスを使用してこれを試しましたが、補間メソッドはメッセージ属性が定義されている場合にのみ呼び出され、これは私がやろうとしていることの目的を無効にします。

したがって、明確にするために、バリデーターにコードのチャンクを尋ねるようにするにはどうすればよいですか? (というか、デフォルトのメッセージが割り当てられています)?"

4

1 に答える 1

1

私は間違っていました-注釈に明示的なメッセージが定義されていない場合でも、MessageInterpolator が呼び出されています。これは私の質問にほとんど答えます。残っている唯一のことは、検証されているフィールド名を取得する方法を理解することです。

編集:

最後に、各フィールドに MessageInterpolator クラスを実装し、コンストラクターでフィールド名を渡し、フィールドが検証されているときにその MessageInterpolator で Validator を作成することを余儀なくされました。これは満足のいくものではありませんが、私が思いついた唯一の解決策でした。

このメモでは、注釈インスタンスにアクセスするときに、注釈付きの要素 (フィールド、メソッド、クラス、またはパラメーター) を追跡する方法がないのはおかしいと思います。これが可能であれば、フィールド名を動的に取得できますが、これはJavaの「不足」のようで、何もできません。

于 2015-07-15T07:35:28.207 に答える