gpt4 book ai didi

java - Spring MVC中重定向和 View 渲染的区别

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:58 24 4
gpt4 key购买 nike

在学习Spring MVC知识的过程中,有一些关于Spring返回类型的东西让我很困惑。

在本文档中: Mapping Requests With @RequestMapping它们返回 appointments/newredirect:/appointments

代码

@RequestMapping(method = RequestMethod.POST)
public String add(@Valid AppointmentForm appointment, BindingResult result) {
if (result.hasErrors()) {
return "appointments/new";
}
appointmentBook.addAppointment(appointment);
return "redirect:/appointments";
}

这两种返回类型的主要区别是什么?据我了解,第一种类型作为转发操作返回,但如果我是对的,为什么他们还发布 forward:/ 作为返回类型?

最佳答案

第一个返回 View ,而第二个重定向到另一个 Controller 请求映射操作。让我们从代码本身来看。

@RequestMapping(method = RequestMethod.POST)
public String add(@Valid AppointmentForm appointment, BindingResult result) {
if (result.hasErrors()) {
return "appointments/new";
}

这里当结果有错误时,它会呈现 View appointments/new 以便用户可以输入正确的详细信息并再次添加约会。 URL 在浏览器中不会改变

    appointmentBook.addAppointment(appointment);
return "redirect:/appointments";
}

但是在这里,当结果没有错误时,此 Controller 操作会将网站重定向到 URL /appointments。检查网络浏览器更改为重定向 URL 的 URL

关于 forward:redirect:

引自这个 Satckoverflow 答案 Why do we use redirect in Spring MVC

在您的 Controller 中使用重定向前缀将生成带有 302 状态代码和指向重定向 URL 的位置 header 的 HTTP 响应。然后浏览器将重定向到该 URL(第一个请求中公开的模型将丢失,浏览器 URL 将是第二个 URL)。

使用转发前缀,转发将由 servlet 在内部完成,因此不需要第二个请求(URL 将保持不变)。转发前缀只应用于浏览器可以安全重复的请求。当您发送更改数据库状态的表单时情况并非如此(重新加载浏览器将导致重复提交)。在这些情况下,您应该使用重定向并应用 POST-redirect-GET 模式。

关于java - Spring MVC中重定向和 View 渲染的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29560633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com