#15 Spring バリデーションの実行
今回はバリデーションを用いて入力可能文字や文字数の制限などを設定していきます。
前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため、所々説明は省略します。
前回まで
前回は型変換に対応するエラーメッセージの処理を行いました。
構築環境
今回はバリデーションを使用するため、依存関係に検証
を設定していない人はMavenの場合はpom.xml、gradleの場合はbuild.gradleに追加する必要があります。
成果物
今回行うこと
今回は以下の流れに沿って進めていきます。
-
SignupForm.javaの各フィールドに必要なバリデーション用のアノテーションを付与する
1. Pattern -
SignupController.javaのメソッドの引数を修正する
1. SignupForm.javaの各フィールドに必要なバリデーション用のアノテーションを付与する
// 省略
@Data
public class SignupForm {
@NotBlank
@Email
private String userId;
private Integer phoneNumber;
private Integer postal1;
private Integer postal2;
private Integer address;
@NotBlank
private String userName;
@NotBlank
@Pattern(regexp="^(?=.*[A-Z])[a-zA-Z0-9_]{8,24}+$")
private String password;
@DateTimeFormat(iso=DateTimeFormat.ISO.DATE)
@Past
private Date birthday1;
@DateTimeFormat(pattern="yyyy/MM/dd")
private Date birthday2;
@Min(5)
@Max(100)
private Integer age;
private MultipartFile accountIcon;
private Integer gender;
}
1. Pattern
パスワードの設定にはPatternアノテーションを使用しました。
今回パスワードに設定した条件は
- 最低1文字は大文字(A~Z)を含む ⇒ [a-zA-Z0-9_]
- 使用できる文字は半角英数字
a~z, A~Z, 0~9
と記号_
(アンダースコア) ⇒ (?=.*[A-Z]) - 8~24文字以内 ⇒ {8,24}
の3つです。
この3つを組み合わせて表現しました。
参考文献
2. SignupController.javaのメソッドの引数を修正する
// 省略
/* ユーザー登録処理 */
@PostMapping("/signup")
public String postSignup(Model model, Locale locale,
@Validated @ModelAttribute SignupForm form,
BindingResult bindingResult) {
// 入力チェック
if(bindingResult.hasErrors()) {
// エラーが発生したので登録画面に戻る
return getSignup(model, locale, form);
}
// ログイン画面にリダイレクト
return "redirect:/login";
}
}
// 変更前
public String postSignup(Model model, Locale locale, @ModelAttribute SignupForm form, BindingResult bindingResult)
// 変更後
public String postSignup(Model model, Locale locale, @Validated @ModelAttribute SignupForm form, BindingResult bindingResult)
入力された値が正しいかどうかの判定は引数@ModelAttribute SignupForm form
に@Validated
を追加します。
これにより、エラー情報がBindingResult
インテーフェースに保持されます。
最後に
以上で各項目にバリデーションを付与することができました。
新規登録画面の各入力フォームに何も入力せずユーザー登録ボタンを押すと以下の画像のようにデフォルトのメッセージが表示されます。
次回はこのメッセージを自分で登録したメッセージが出力されるよう変更します。