入力値の型変換エラー時に入力画面に適切なメッセージを表示する

画面から入力された値は、Jakarta Bean Validationにより下記の流れで処理されますが、入力値をBeanに変換する際に型変換エラーが発生する場合があります。

Jakarta Bean Validationの処理の流れ
  1. 入力値をBeanに変換

    プロパティの型がString以外の場合は、型変換が行われます。

  2. Jakarta Bean Validationの実行

  3. アプリケーションは検証済みのBeanを使って処理を行う

デフォルトでは、型変換時に入力画面に表示するメッセージが定義されていないため、入力画面には以下のように例外の内容がそのまま表示されてしまいます。

../../_images/type-converter-error-default-message.png

このページでは、入力値の型変換でエラーが発生した場合に、入力画面に適切なメッセージを表示する方法について説明します。

以下のサンプルコードの動作確認環境については、 動作確認環境と依存ライブラリについて を参照してください。

メッセージの定義例

型変換が失敗した際に表示するメッセージを定義することで、入力画面に入力値に誤りがあることを表示できます。

入力値を受け取るBean(Form)

入力パラメータを保持するBeanのプロパティを適切な型で宣言します。

    @NotEmpty
    @Length(max = 255)
    private String name;

    private MailAddress mailAddress;

    @NotNull
    private Integer age;

    @NotEmpty
    private String role;
メッセージ

メッセージを typeMismatch.<変換対象の型の完全修飾名> で定義します。 変換対象の型がjava.lang.Integer の場合には、メッセージのキーは typeMismatch.java.lang.Integer となります。

typeMismatch.java.lang.Integer=数値で入力してください。
typeMismatch.keel.validation.value.MailAddress=メールアドレス形式(sample@example.com)で入力してください。
role.notFound=ロールにはadmin以外登録出来ません。
mailAddress.duplicated=入力されたメールアドレスは登録済みです。
add.success={0}の登録を完了しました。

Tip

特定の画面のみ型変換時に表示するメッセージを変更したい場合は、下のように typeMismatch.<項目名> とすることで対応できます。 詳細な仕様は、 DefaultMessageCodesResolver を参照してください。

typeMismatch.age=数値で入力してください。
実行結果

型変換時には定義したメッセージが表示されます。

../../_images/type-converter-error-message.png

サンプル全体は validation-sample を参照してください。