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

时间:2016-11-30 05:11:30

标签: spring-boot controller thymeleaf

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

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";
}

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

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

提前致谢。

4 个答案:

答案 0 :(得分:26)

试试这个:

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

    //your code

    return "redirect:/showData";
}

答案 1 :(得分:1)

麻雀的解决方案对我不起作用。它只是渲染了文本"重定向:/"

我能够通过将/category/extended-slug?json=true 添加到控制器方法标题来实现它。

然后在代码中,将HttpServletResponse httpResponse添加到方法中。

示例:

httpResponse.sendRedirect("/");

答案 2 :(得分:0)

您应该从addData请求中返回http状态代码3xx,并将redirct网址放在响应中。

答案 3 :(得分:0)

以下解决方案为我工作。 getAllCategory()方法显示数据,createCategory()方法将数据添加到数据库。使用返回“ redirect:categories”; ,将重定向到getAllCategory()方法。

@GetMapping("/categories")
public String getAllCategory(Model model) {
    model.addAttribute("categories",categoryRepo.findAll());
    return "index";
}

@PostMapping("/categories")
public String createCategory(@Valid Category category) {

    categoryRepo.save(category);
    return "redirect:categories";
}

也可以使用Ajax jQuery。