【Spring Boot】リダイレクト先にパラメータを渡す

spring boot

リダイレクト先にパラメータを渡す方法

初期画面で入力された名前を送信すると、リダイレクト先の画面に入力値が表示される。

コントローラクラス

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class DemoController {

	// 初期表示画面
	@GetMapping("/")
	  public String index(Model model) {
		// 初期画面へ
		return "index";
	  }

	// サブミット処理
	@PostMapping("/submit")
	  public String submit(@RequestParam String username, RedirectAttributes redirectAttributes) { 
		// リダイレクト先へ値を設定
		redirectAttributes.addFlashAttribute("username", username);
		// 次の画面へリダイレクト
		return "redirect:/next";
	  }

	// サブミット画面からのリダイレクト先
	@GetMapping("/next")
	  public String next(Model model) {
		// リダイレクト時に渡されたユーザー名を取得
        String username = (String) model.getAttribute("username");

        // ビューにユーザー名を渡す
        model.addAttribute("username", username);
        // 次の画面へ
        return "next";
    }
}

リダイレクト先へデータを渡す場合は、
RedirectAttributesクラスの addFlashAttributeメソッドを使う

public String submit(@RequestParam String username, RedirectAttributes redirectAttributes) { 
		  redirectAttributes.addFlashAttribute("username", username);
		  return "redirect:/next";
}

受け取る際は、ModelクラスのgetAttributeを使う

public String next(Model model) {
		// リダイレクト時に渡されたユーザー名を取得
        String username = (String) model.getAttribute("username");

入力画面のHTMLは以下の通り

	<!DOCTYPE html>
	<html xmlns:th="http://www.thymeleaf.org">
	<head>
	  <meta charset="UTF-8">
	  <title>Hello world</title>
	</head>
	<body>
	  	<form action="/submit" method="post">
			名前:<input type="text" name="username">
		    <input type="submit" value="送信" />
		</form>
	</body>
	</html>

リダイレクト先のHTML

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>次のページ</title>
</head>
<body>
    受け取った値
    <div th:text="${username}"></div>    
</body>
</html>
タイトルとURLをコピーしました