LoginSignup
1
2

More than 1 year has passed since last update.

#15 Spring バリデーションの実行[正規表現]

Posted at

#15 Spring バリデーションの実行

今回はバリデーションを用いて入力可能文字や文字数の制限などを設定していきます。

前提条件

この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため、所々説明は省略します。

前回まで

前回は型変換に対応するエラーメッセージの処理を行いました。

構築環境

  1. 各バージョン
    Spring Boot ver 2.7.5

  2. 依存関係
    image.png

今回はバリデーションを使用するため、依存関係に検証を設定していない人はMavenの場合はpom.xml、gradleの場合はbuild.gradleに追加する必要があります。

成果物

image.png

今回行うこと

今回は以下の流れに沿って進めていきます。

  1. SignupForm.javaの各フィールドに必要なバリデーション用のアノテーションを付与する
     1. Pattern

  2. SignupController.javaのメソッドの引数を修正する

1. SignupForm.javaの各フィールドに必要なバリデーション用のアノテーションを付与する

SignForm.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のメソッドの引数を修正する

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インテーフェースに保持されます。

最後に

以上で各項目にバリデーションを付与することができました。
新規登録画面の各入力フォームに何も入力せずユーザー登録ボタンを押すと以下の画像のようにデフォルトのメッセージが表示されます。
次回はこのメッセージを自分で登録したメッセージが出力されるよう変更します。
image.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2