実際、 @Constraintを介してカスタムアノテーションを定義するために使用できる方法です。
@constraint(validatedby = xxxx.class)
以下は、フロントとバックエンドのパラメーター検証を実装するために行ったJavaカスタムアノテーションのコード例です。
これに興味がある場合は、注意深く読んで慎重に学んでください。
パッケージsonn.sonnannotation; import java.lang.annotation.documented; import java.lang.annotation.elementtype; Import java.lang.annotation.retention; import java.lang.annotation.RententionPolicy; Import Java.Lang.Annotation.Target; Import Javax.Validation; Import Javax.Validation; javax.validation.constraintvalidator; Import javax.validation.constraintvalidatorContext; import javax.validation.payload; Import sonn.util.stringutill;/*** @classname:isvalidstring* @description:@descriptationsを決定するかどうかを決定するかどうかを決定するカスタム解釈2016-7-25 8:22:58 PM *@version 1.0 */@target({elementType.field、elementType.method})@retention(retentionPolicy.runtime)@constraint(validatedby = isValidString.ValidStringChecker.class)@documentedpublic@interface is isvalidstring " class <?> [] groups()default {};クラス<?ペイロード> [] payload()default {}; class validStringCheckerはconstraintValidator <isValidString、string> {@Override public void initialize(isValidString arg0){} @Override public boolean isvalid(string strvalue、constraintValidatorContextコンテキスト){if(stringutill.isstringempty(stralue)){return true; } if(strvalue.contains( "<")){return false; } trueを返します。 }}}上記のコードは、@constraint(validatedby = isvalidstring.validstringchecker.class)を介した注釈のメソッドロジックを定義します。
この内部クラスは、constraintvalidator <isvalidString、string> interfaceを実装します
公式のドキュメントでは、次のように説明しています。
javax.validation
インターフェイスConstraintValidator <Aは注釈、t>を拡張します
•
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
パブリックインターフェイスConstraintValidator <a endoct notation、t>は、特定のオブジェクトタイプTの特定の制約Aを検証するためにロジックを定義します。
実装は、次の制限に従う必要があります。
•Tは、パラメーター化されていないタイプに解決する必要があります
•またはtの一般的なパラメーターは、固定されていないワイルドカードタイプでなければなりません
Annotation supportedValidationTargetは、ConstraintValidatorの実装を使用して、クロスパラメーターの制約をサポートするものとしてマークすることができます。詳細については、supportedValidationTargetと制約をご覧ください。
実装されたiSValidメソッドは、このインターフェイスの検証方法です。
効果をテストし、検証するエンティティクラスフィールドに注釈を追加します。
記事ページを書き、記事タイトルに '<'を追加して送信してください。
500の誤差で提出が失敗し、注釈が有効であることを示しています。
しかし、これにはまだ問題があります。私のブログのウェブサイトは、エラーメッセージを直接印刷できません。それでもエラーページを作成する必要があります。
これは簡単で、web.xmlの下のエラーページパスを追加してから、ページを作成します。
<エラーページ>
<エラーコード> 500 </error-code>
<location>/error.jsp </location>
</error-page>
まず、いくつかの基本的な概念を紹介しましょう。
1.Javaは、@interface xx {}で注釈を定義します。
注釈は実際には神秘的ではなく、単なるマークです。プログラムがマークで実行されると、対応するロジックが実行されます。注釈自体はクラスです。
2。注釈を定義する場合、いくつかの注釈にラベルを付けることは、特定の意味を表すことができます。
@retention(retentionPolicy.source)//アノテーションはソースコードにのみ存在し、クラスバイトコードファイルには含まれていません。
@retention(RetentionPolicy.class)//デフォルトの保持ポリシーでは、アノテーションはクラスのbytecodeファイルに存在しますが、ランタイム中に取得することはできません。
@retention(retentionPolicy.runtime)//アノテーションはクラスバイトコードファイルに存在し、実行時に反射を通じて取得できます。
(ランタイムは、反射によって取得できることを意味するため、注目に値します)
@target(elementType.Type)//インターフェイス、クラス、列挙、注釈
@target(elementtype.field)//フィールドとenumsの定数
@target(elementType.Method)//メソッド
@target(elementType.Parameter)//メソッドパラメーター
@target(elementtype.constructor)// constructor
@target(elementType.Local_variable)//ローカル変数
@target(elementType.annotation_type)// annotation
@target(elementType.Package)//パッケージ
注釈を定義する際に@taget(xx)と@retention(retentionpolicy.runtime)を追加する方法はありますが、注釈にメソッドを記述しないでください。反射メカニズムを使用して実行時に注釈を取得し、対応するロジックを自分で書きます(いわゆる注釈パーサー)
おそらく書くのに似た同様の方法:
java.lang.annotation.documented; import java.lang.annotation.elementType; Import java.lang.annotation.inherited; Import java.lang.annotation.Retention; Import java.lang.annotation.RetentionPolicy; Import Java.lang.lang.lang.lang.lang.lang.teraget(@peletated@perted @peped @peped @pepted @peleted @peledtation; elementType.Method}) @retention(retentionPolicy.runtime)public @interface validate {public int min()default 1; public int max()デフォルト10; public boolean isnotnull()default true;}後で実行するときは、リフレクションを使用して注釈を取得すると、詳細については説明しません。
インターネット上で技術的な記事を探す前に、この種の技術的な記事を見つけましたが、当時は大きな混乱をもたらしました。私は欲しいとは思わない。
フロントとバックエンドのパラメーター検証を実装するJavaカスタムアノテーションの上記の例は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。