【Java】BeanValidator

前提

※SpringBoot2.3以上の場合、設定が必要
(Gradleの場合はbuild.gradleに追記)

dependencies {
        …
	implementation 'org.springframework.boot:spring-boot-starter-validation'
}

使い方

1.変数にアノテーションを付与する
public class Member {
	@NotBlank
	private String name;

	@Max(100)
	private String age;
}
2.Controllerにアノテーションを付与する

@Validatedを@ModelAttribute内に付与することでバリデータが走る
※BindingResultは必ず@ModelAttributeの直後にすること

@PostMapping
public String create(@ModelAttribute("member") @Validated Member member, BindingResult result, Model model) {
  if (result.hasErrors()) {
    return "new";
  } else {
    memberService.save(member);
    return "redirect:/members";
  }
}
3.HTMLに記載

th:if="${#fields.hasErrors('name')}" th:errors="*{name}"

<form th:method="post" th:action="@{/members}" th:object="${member}">
 <div class="form-group row">
  <label class="col-md-2 control-label">名前</label>
   <div class="col-md-10">
    <input class="form-control" type="text" name="name" th:value="*{name}" />
     <div class="text-danger" th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></div>
   </div>
 </div>
 <div class="form-group row">
  <label class="col-md-2 control-label">年齢</label>
   <div class="col-md-10">
    <input class="form-control" type="text" name="age" th:value="*{age}"/>
     <div class="text-danger" th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></div>
   </div>
 </div>
 <div class="form-group row">
  <div class="offset-md-2 col-md-10">
   <button class="btn btn-primary">新規</button>
  </div>
 </div>
</form>

種類

アノテーション 用途 記述 デフォルトメッセージ
@NotBlank Null、空文字(“”)、空白のみならエラー @NotBlank 空白は許可されていません
@NotEmpty Null、または空ならエラー @NotEmpty 空要素は許可されていません
@Null null以外でエラー @Null null にしてください
@NotNull nullならエラー @NotNull null 以外にしてください?
@Pattern 指定したパターン以外ならエラー※+なければ1文字のみ @Pattern(regexp=“[0-9]+”) 正規表現 "[0-9]+" にマッチさせてください
@Min min値を下回るとエラー @Min(value=1) ※0でエラー 1以上の値にしてください
@Max max値を超えるとエラー @Max(value=100) ※101でエラー 100以下の値にしてください
@DecimalMin min値を下回るとエラー @DecimalMin(“0.0”) 0.0 以上の値にしてください
@DecimalMax max値を超えるとエラー @DecimalMax(“9.9”) 9.9 以下の値にしてください
@Size 文字数が指定した長さ以外ならエラー※minまたはmaxのみでも可 @Size(min=4, max=64) 4 から 64 の間のサイズにしてください
@Digits 範囲内の数値以外ならエラー @Digits(integer=6, fraction=2) 値は次の範囲にしてください (<整数 6 桁>.<小数点以下 2 桁>)
@AssertTrue falseならエラー※boolean型のみ @AssertTrue true にしてください
@AssertFalse trueならエラー※boolean型のみ @AssertFalse false にしてください
@Future 未来日でないならエラー※日付型のみ @Future 未来の日付にしてください
@Past 過去日でないならエラー※日付型のみ @Past 過去の日付にしてください
@CreditCardNumber クレカ番号でないならエラー @CreditCardNumber 正しくないクレジットカードの番号です
@Email メルアドでないならエラー @Email 電子メールアドレスとして正しい形式にしてください
@URL URLでないならエラー @URL URL として正しい形式にしてください

エラーメッセージを指定する

パターン1.項目単位に指定

messageパラメータを記述する

@NotBlank(message="必須入力です")
パターン2.アノテーション単位に指定

1.プロパティファイルを作成する
※名前はValidationMessages.properties
f:id:vist764:20200913004507p:plain:w200
2.エラーメッセージを記述する
※messageの前がアノテーション

javax.validation.constraints.NotBlank.message = 必須入力です
javax.validation.constraints.Size.message = {min}以上{max}以下で入力してね

チェックの範囲

f:id:vist764:20200912233814p:plain:w500