【Java】SpringBootでリダイレクトする方法

はじめに

SpringBootで、特定のURLに来たリクエストをリダイレクトする基本的な方法をご紹介します。

と言っても、リダイレクトする場合はControllerの戻り値に”redirect:<リダイレクト先のパス>”を指定するだけなのでとても簡単です。

早速みてみましょう。

超簡単な例

簡単な例として以下のようなケースを見てみましょう。

  1. クライアントが”/path/aaa”にリクエスト送信
  2. “/path/aaa”で受けたリクエストを”/path/bbb”にリダイレクト
  3. “/path/bbb”がクライアントにレスポンスを返却

とてもシンプルな例ですね。

これをSpringBootで実装すると、


@Controller
@RequestMapping(path = "path")
public class TestController {

    @GetMapping(path="aaa")
    public String aaa() {
        return "redirect:bbb";
    }

    @ResponseBody
    @GetMapping(path="bbb")
    public String bbb() {
        return "Hello World!!";
    }


}

上記のようになります。

ここでのポイントはaaaメソッドの戻り値として「redirect:bbb」を指定することです。

SpringBootでは、このような書き方をすることで「redirect:」の後に記述したパスにリダイレクトしてくれます。

リダイレクト先URLにパラメータが必要な場合

リダイレクト先のURLにパラメータが必要なケースもあると思います。

その場合は、リダイレクト元(上記の例だとaaaメソッド)にRedirectAttributesクラスの引数を追加することで、パラメータの受け渡しが可能になります。

@Controller
@RequestMapping(path = "path")
public class TopController {

    @GetMapping(path="aaa")
    public String aaa(RedirectAttributes redirectAttributes) {
        redirectAttributes.addFlashAttribute("param1", "パラメータ1");
        redirectAttributes.addFlashAttribute("param2", "パラメータ2");
        return "redirect:bbb";
    }

    @ResponseBody
    @GetMapping(path="bbb")
    public String bbb(@ModelAttribute("param1") String parameter1, @ModelAttribute("param2") String parameter2) {
        return "Hello World!![param1=" + parameter1 + ", param2=" + parameter2 + "]";
    }

}

今回の例だと、bbbメソッドが2つのString型パラメータを受け付けるようになっています。

このような場合は、aaaメソッドの引数にRedirectAttributesクラスの引数を追加し、bbbに受け渡すパラメータをKeyValue形式で設定してあげます。

bbbの第一、第二パラメータの名称がそれぞれ「param1」「param2」となっているので、redirectAttributesにはこれらをキーとして値をセットしてあげることになります。

これを実行すると以下のようにパラメータがちゃんと受け渡されました。

コメント