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

jljoyd4f  于 12个月前  发布在  Spring
关注(0)|答案(5)|浏览(157)

我正在使用SpringBoot和Thymeleaf创建一个非常基本的应用程序。在控制器中,我有2个方法,如下所示:
方法1-此方法显示数据库中的所有数据:

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

字符串
方法2-此方法将数据添加到数据库:

@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。这可能吗?如果可能,如何做到这一点?

3xiyfsfu

3xiyfsfu1#

试试这个:

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

    //your code

    return "redirect:/showData";
}

字符串

92vpleto

92vpleto2#

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

字符串

rdrgkggo

rdrgkggo3#

下面的解决方案对我来说很有效。getAllCategory()方法显示数据,并将数据添加到数据库中。使用return“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";
}

字符串
或者使用ajQuery也是可能的。

yquaqz18

yquaqz184#

你应该从addData请求中返回一个http状态码3xx,并将redirct url放在响应中。

atmip9wb

atmip9wb5#

示例如何重定向
1./ ->/swagger-ui/index. html
1./swagger ->/swagger-ui/index. html

import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class RedirectController {

    private static final String SWAGGER_URL = "/swagger-ui/index.html";

    @GetMapping("/")
    @ResponseBody
    public void root(HttpServletResponse httpResponse) throws IOException {
        httpResponse.sendRedirect(SWAGGER_URL);
    }

    @GetMapping("/swagger")
    @ResponseBody
    public void swagger(HttpServletResponse httpResponse) throws IOException {
        httpResponse.sendRedirect(SWAGGER_URL);
    }
}

字符串

相关问题