LoginSignup
1
0

More than 1 year has passed since last update.

【SpringBoot】入力値チェックエラーをリダイレクト先に渡す方法

Last updated at Posted at 2022-08-12

ユーザーからの入力値を受け取った後、入力値チェックに引っかかった場合は、エラー内容とともにリダイレクトを行いたい。
※ 今回ユーザーからの入力値を受け取るクラスをUserFormとする。

リダイレクト先
@RequestMapping("/afterRedirect")
	public String afterRedirect() {
		return "afterRedirect";
	}

リダイレクト元

	@RequestMapping("/beforeRedirect")
	public String beforeRedirect(
			@Validated UserForm userForm, // 今回ユーザーからの入力値を受け取るクラスをUserFormとして作成
			BindingResult result, 
			RedirectAttributes redirectAttributes, 
			) {
		// 入力値チェックして、エラーがあればリダイレクトする
		if(result.hasErrors()) {
			redirectAttributes.addFlashAttribute(userForm); // (1)
			redirectAttributes.addFlashAttribute(BindingResult.MODEL_KEY_PREFIX + Conventions.getVariableName(userForm), result); // (2)
			return "redirect:/afterRedirect";
		}

		return "noRedirect";
	}

解説

Number 内容
(1) ユーザーが入力した値をリダイレクト先でも維持していたいので、フラッシュスコープにuserFormを詰める。
(2) ここでBindingResultのエラー内容をフラッシュスコープに詰めている。
BindingResultがページに渡される際には、オブジェクト名の前にorg.springframework.validation.BindingResult.という接頭辞がつくらしい。この接頭辞は、BindingResult#MODEL_KEY_PREFIXで表現することができる。
今回、UserFormクラスのエラーをリダイレクト先に渡したいので、ConventionsクラスgetVariableNameメソッドを用いて変数名を指定する。
よって、フラッシュスコープには、スコープ名 BindingResult.MODEL_KEY_PREFIX + Conventions.getVariableName(userForm),スコープの中身は resul となる

参考文献

【悲報】Spring Bootのバリデーションで壁にぶち当たる
org.springframework.core.Conventions
SpringMVC BindingResultのRedirect

1
0
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
0