から次のメソッドを参照していますBindingResult
。
BindingResult.html#resolveMessageCodes(java.lang.String, java.lang.String)
エラーコードとメッセージコードの違いを理解しようとしています。誰かが例を提供してもらえますか?特に、特定のエラー コードに対して複数のメッセージ コードが存在する理由を説明する例を教えてください。
から次のメソッドを参照していますBindingResult
。
BindingResult.html#resolveMessageCodes(java.lang.String, java.lang.String)
エラーコードとメッセージコードの違いを理解しようとしています。誰かが例を提供してもらえますか?特に、特定のエラー コードに対して複数のメッセージ コードが存在する理由を説明する例を教えてください。
Web アプリケーションは国際化されているため、オブジェクトを拒否してメッセージを表示したい場合、言語に関係なく同じように表示されるため、ハードコーディングされたテキストは使用しません。
代わりに、後でサーバーがバンドルから適切なメッセージを取得するためのキーとしてエラー コードを指定します (エラー コードは、適切なメッセージ テキストを見つける必要があるメソッドの観点からのメッセージ コードです)。
Spring が (実装に基づいて) いくつかのメッセージ コードを追加するため、エラー コードはより多くのメッセージ コードに解決されます。以下は、Spring ドキュメントのスニペットです。
[...] 登録するエラー コードは、使用される MessageCodesResolver によって決まります。デフォルトでは、DefaultMessageCodesResolver が使用されます。たとえば、指定したコードでメッセージを登録するだけでなく、reject メソッドに渡したフィールド名を含むメッセージも登録します。したがって、rejectValue("age", "to.darn.old") を使用してフィールドを拒否する場合、too.darn.old コードとは別に、Spring は too.darn.old.age と too.darn.old も登録します。 .age.int (したがって、最初のフィールドにはフィールド名が含まれ、2 番目のフィールドにはフィールドの型が含まれます); これは、開発者がエラー メッセージなどをターゲットにする際に便利なように行われます。[...]
最後のステートメントは、より多くのメッセージ コードが存在する理由です。ユーザーに表示されるメッセージを制御するために、一般的なもの (たとえば、「値が必要です」) から、コンテキストが与えられたより具体的なもの (たとえば、「値が必要です」) まであります。フィールド XXX に必要です」)。
のjavadocDefaultMessageCodesResolver
はそれをさらに説明し、例を示します:
たとえば、コード「typeMismatch」、オブジェクト名「user」、フィールド「age」の場合:
- 「typeMismatch.user.age」を試してください
- 「typeMismatch.age」を試してください
- 「typeMismatch.int」を試してください
- 「typeMismatch」を試してください
したがって、この解決アルゴリズムを利用して、たとえば、「required」や「typeMismatch」などのバインディング エラーの特定のメッセージを表示できます。
オブジェクト + フィールド レベル (「年齢」フィールド、ただし「ユーザー」のみ)。フィールド レベル (オブジェクト名に関係なく、すべての「年齢」フィールド)。または一般的なレベル (すべてのフィールド、任意のオブジェクト)。