Spring Boot - 重定向到不同的控制器方法

Rev*_*sha 19 controller thymeleaf spring-boot

我是Spring Boot的新手.我正在使用SpringBoot和Thymeleaf创建一个非常基本的应用程序.在控制器中我有两种方法如下:

Method1 - 此方法显示数据库中的所有数据:

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

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";
}
Run Code Online (Sandbox Code Playgroud)

HTML文件与这些方法相对应,即show_data.html和add_data.html.

一旦addData方法完成,我想显示数据库中的所有数据.但是,上面的代码会将代码重定向到静态add_data.html页面,并且不会显示新添加的数据.我需要以某种方式调用控制器上的showData方法,因此我需要将用户重定向到/ showData URL.这可能吗?如果是这样,怎么办呢?

提前致谢.

spa*_*row 33

试试这个:

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

    //your code

    return "redirect:/showData";
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您尝试将请求从一个 RestController 重定向到另一个 RestController,这将不起作用 (6认同)

Gaʀ*_*ʀʀʏ 5

麻雀的解决方案对我不起作用。它只是呈现了文本“ 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>";
}
Run Code Online (Sandbox Code Playgroud)