springbootのValidationの複数の出力方法について

2021-03-21

こんにちは管理人(@vip___p)です。

今回はSpringbootのvalidationについて触れていこうと思います。

今回やりたいことはvalidationを実施して
htmlでエラーメッセージ出力を行うことです。

プロパティを少し特殊な方法で出力も行いと思います。

下記のような方は是非参考にしてください。

  • Java初学者
  • spring初学者

springbootに関連する記事は描きを参考にして下さい。

spring bootアノテーション一覧

Themeleaf if elseの処理方法

SpringbootのMessageSourceについて

SpringbootのValidation実施方法

まずは単純なValidationの実施を行いたいと思います。

formクラス

public class Test implements Serializable {

   @Size(min = 4,max=5)
   private String age;
   
    public String getAge() {
        return age;
    }
   public void setAge(String age) {
        this.age = age;
    }
}

formでValidationを実施したい値を作成します。
Getter/Setterを作成するのを忘れずにしてください。
実施したいアノテーションを付けます。

controllerクラス

@RequestMapping("/sample")
public string validation(@validated Test test,
BindingResult result,Model model) {
  
  String errorMessage = "";
   for (ObjectError error : result.getAllErrors()) {
   // エラーメッセージ取得
      errorMessages += error.getDefaultMessage();
   }
   model.addattribute("message",errorMessages)
}

エラーメッセージを取得してModelに格納して出力する内容です。
もっと良い方法があると思いますが
直感的にわかりやすいかなと思います。

html

body th:object="${test}"
form th:action"${/sample}"method="post"
input type="text" name="age"
p th:text="${error}"

少し見にくいですね。formとの紐づけは下記の通りです。

Controllerのメソッドの引数のformの変数です。

th:object="${test}"

@RequestMappingを指定

th:action"${/sample}"method="post"

formの変数を指定

type="text" name="age"

最後にControllerのModelで格納した第一引数を指定

th:text="${error}"

とりあえずはこれで出力できるようになったと思います。

続いてはプロパティファイルからの読み込みを行いたいと思います。

プロパティの出力方法

  1. ValidationMessages.propertiesを作成する
  2. resource配下に配置

properti確認していきましょう。

ValidationMessages.properties

name=yama
mail=mail
error={0}は英数字であること。
error.number={0}は{1}文字以下で{2}文字以上の値を入力してください。

例1

まずはmail英数字であること。

このメッセージを少し手を加えて出力させたいと思います。

strutsなどでよくあったと思います。

ValidationMessages.properties
error={は英数字であること

先頭の{0}を削除しこの先頭に代入するという感じです。

form

@Pattern(regexp = "[a-zA-Z0-9]*" message="{mail}{error}")
private String name;

出力結果
まずはmail英数字であること。

例2

次はこんな感じのメッセージ出力です。

mailは1文字以下で5文字以上の値を入力してください。

ValidationMessages.properties
error.number=は{min}以下で{max}以上の値を入力してください。

先頭の{0}を削除し{min}の部分に数値を代入するという感じです。

先ほどの応用です。
form

@Size(min = 1, max = 5, message="{mail}{error.number}")
private String name;

出力結果
mailは1文字以下で5文字以上の値を入力してください。

このように少し応用するだけで幅が広がると思います。

ただmailは{0}を入力できませんのような形はまだ発見できていません。

まとめ

まとめ

今回のまとめです。

SprigbootのValidationについて触れました。

皆さんの参考になれば幸いです。