web-dev-qa-db-ja.com

Spring Boot-別のコントローラーメソッドへのリダイレクト

私はSpring Bootを初めて使用します。 SpringBootとThymeleafを使用して、非常に基本的なアプリケーションを作成しています。コントローラーには、次の2つの方法があります。

Method1-このメソッドは、データベースのすべてのデータを表示します。

  @RequestMapping("/showData")
public String showData(Model model)
{
    model.addAttribute("Data", dataRepo.findAll());
    return "show_data";
}

Method2-このメソッドは、データベースにデータを追加します。

@RequestMapping(value = "/addData", method = RequestMethod.POST)
public String addData(@Valid Data data, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "add_data";
    }
    model.addAttribute("data", data);
    investmentTypeRepo.save(data);

    return "add_data.html";
}

これらのメソッド、つまりshow_data.htmlおよびadd_data.htmlに対応するHTMLファイルが存在します。

AddDataメソッドが完了したら、データベースのすべてのデータを表示します。ただし、上記はコードを静的なadd_data.htmlページにリダイレクトし、新しく追加されたデータは表示されません。何らかの方法でコントローラーでshowDataメソッドを呼び出す必要があるため、ユーザーを/ showData URLにリダイレクトする必要があります。これは可能ですか?もしそうなら、どのようにこれを行うことができますか?

前もって感謝します。

15
Revansha

これを試して:

@RequestMapping(value = "/addData", method = RequestMethod.POST)
public String addData(@Valid Data data, BindingResult bindingResult, Model model) {

    //your code

    return "redirect:/showData";
}
29
sparrow

スズメの解決策はうまくいきませんでした。テキスト「redirect:/」をレンダリングしただけです

コントローラメソッドヘッダーに_HttpServletResponse httpResponse_を追加することで、動作させることができました。

次に、コードでhttpResponse.sendRedirect("/");をメソッドに追加します。

例:

_@RequestMapping("/test")
public String test(@RequestParam("testValue") String testValue, HttpServletResponse httpResponse) throws Exception {
    if(testValue == null) {
        httpResponse.sendRedirect("/");
        return null;
    }
    return "<h1>success: " + testValue + "</h1>";
}
_
5
Gaʀʀʏ

AddDataリクエストからhttpステータスコード3xxを返し、応答にredirct urlを配置する必要があります。

0
niekname