【Java・SpringBoot・Thymeleaf】バリデーションエラーメッセージを変更(SpringBootアプリケーション実践編4)
14612 ワード
ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます🌟
前回のエラーメッセージ実装に引き続き、メッセージプロパティファイルを複数用意して切り替える方法を実装します
前回の記事🌟
【Java・SpringBoot・Thymeleaf】エラーメッセージを実装(SpringBootアプリケーション実践編3)
ユーザー登録画面用のフォームクラスにバリデーション実装
-
フォームクラスの各フィールドにアノテーションを付けるだけ!で入力チェックが出来る
- NotNull・NotEmpty・NotBlankの違い
アノテーション | null | 空文字 | 空白 |
---|---|---|---|
@NotNull | NG | OK | OK |
@NotEmpty | NG | NG | OK |
@NotBlank | NG | NG | NG |
SignupForm.java
package com.example.demo.login.domain.model;
import java.util.Date;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
@Data
public class SignupForm {
//入力形式、メールアドレス形式
@NotBlank
@Email
private String userId; //ユーザーID
//入力必須、長さ4-100桁まで、半角英数字のみ
@NotBlank
@Length(min= 4 ,max = 100)
@Pattern(regexp = "^[a-zA-Z0-9]+$")
private String password; //パスワード
//入力必須
@NotBlank
private String userName; //ユーザー名
//入力必須
@NotNull
@DateTimeFormat(pattern = "yyyy/MM/dd")
private Date birthday; //誕生日
//値は20-100
@Min(20)
@Max(100)
private int age; //年齢
//falseのみ可能
@AssertFalse
private boolean marriage; //結婚ステータス
}
コントローラークラス修正
バリデーションの実施
- 引数のフォームクラスに@Validatedアノテーションを付ける
- バリデーションのチェック結果はBindingResultクラスに入る
- →バリデーションを使う場合、BindingResultクラスを引数に設定する必要がある
public String postSignUp(@ModelAttribute @Validated SignupForm form,
BindingResult bindingResult,
Model model) {...}
@Validatedと@Valid
-
@Validated:Spring標準のアノテーション。今回は@Validatedを使用
-
@Valid:J2EEから標準で搭載されているBeanValidator(バリデーション用のアノテーション)
メッセージプロパティファイル名、エラーメッセージの書き方が違う
SignupController.java
package com.example.demo.login.controller;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.demo.login.domain.model.SignupForm;
@Controller
public class SignupController {
//ラジオボタン用変数
private Map<String, String> radioMarriage;
//ラジオボタンの初期化メソッド
private Map<String, String> initRadioMarrige() {
Map<String, String> radio = new LinkedHashMap<>();
// 既婚、未婚をMapに格納
radio.put("既婚", "true");
radio.put("未婚", "false");
return radio;
}
//ユーザー登録画面のGET用コントローラ
@GetMapping("/signup")
public String getSignUp(@ModelAttribute SignupForm form, Model model) {
// ラジオボタンの初期化メソッド呼び出し
radioMarriage = initRadioMarrige();
// ラジオボタン用のMapをModelに登録
model.addAttribute("radioMarriage", radioMarriage);
// signup.htmlに画面遷移
return "login/signup";
}
//ユーザー登録画面のPOST用コントローラ
//バリデーション実装
@PostMapping("/signup")
public String postSignUp(@ModelAttribute @Validated SignupForm form,
BindingResult bindingResult,
Model model) {
// 入力チェックに引っかかった場合、ユーザー登録画面に戻る
if (bindingResult.hasErrors()) {
// GETリクエスト用のメソッドを呼び出して、ユーザー登録画面に戻る
return getSignUp(form, model);
}
// formの中身をコンソールで確認
System.out.println(form);
// login.htmlにリダイレクト
return "redirect:/login";
}
}
SpringBootを起動、新規登録画面を確認!
-
http://localhost:8080/login
- ユーザー登録画面で何も入力せずユーザー登録ボタンを押すと、エラーメッセージが表示されました〜〜
- 今のままでは英語のメッセージなので、次回は入力チェックのエラーメッセージを編集して日本語化します^o^
- バリデーションのチェック結果はBindingResultクラスに入る
- →バリデーションを使う場合、BindingResultクラスを引数に設定する必要がある
public String postSignUp(@ModelAttribute @Validated SignupForm form,
BindingResult bindingResult,
Model model) {...}
メッセージプロパティファイル名、エラーメッセージの書き方が違う
SignupController.java
package com.example.demo.login.controller;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.demo.login.domain.model.SignupForm;
@Controller
public class SignupController {
//ラジオボタン用変数
private Map<String, String> radioMarriage;
//ラジオボタンの初期化メソッド
private Map<String, String> initRadioMarrige() {
Map<String, String> radio = new LinkedHashMap<>();
// 既婚、未婚をMapに格納
radio.put("既婚", "true");
radio.put("未婚", "false");
return radio;
}
//ユーザー登録画面のGET用コントローラ
@GetMapping("/signup")
public String getSignUp(@ModelAttribute SignupForm form, Model model) {
// ラジオボタンの初期化メソッド呼び出し
radioMarriage = initRadioMarrige();
// ラジオボタン用のMapをModelに登録
model.addAttribute("radioMarriage", radioMarriage);
// signup.htmlに画面遷移
return "login/signup";
}
//ユーザー登録画面のPOST用コントローラ
//バリデーション実装
@PostMapping("/signup")
public String postSignUp(@ModelAttribute @Validated SignupForm form,
BindingResult bindingResult,
Model model) {
// 入力チェックに引っかかった場合、ユーザー登録画面に戻る
if (bindingResult.hasErrors()) {
// GETリクエスト用のメソッドを呼び出して、ユーザー登録画面に戻る
return getSignUp(form, model);
}
// formの中身をコンソールで確認
System.out.println(form);
// login.htmlにリダイレクト
return "redirect:/login";
}
}
- http://localhost:8080/login
- ユーザー登録画面で何も入力せずユーザー登録ボタンを押すと、エラーメッセージが表示されました〜〜
- 今のままでは英語のメッセージなので、次回は入力チェックのエラーメッセージを編集して日本語化します^o^
Author And Source
この問題について(【Java・SpringBoot・Thymeleaf】バリデーションエラーメッセージを変更(SpringBootアプリケーション実践編4)), 我々は、より多くの情報をここで見つけました https://qiita.com/suema0331/items/dd91d21168080b747c8d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .