Spring重定向控制器不能正常工作,如返回“redirect:/ reservation / reservationSuccess”,但返回“/ reservation / reservationSuccess”;工作中。为什么它不起作用。哪里出错了。请帮忙。
@RequestMapping(method = RequestMethod.POST)
public String submitForm(@ModelAttribute("reservation") Reservation reservation,
BindingResult result,
SessionStatus status,
Model model) {
validator.validate(reservation, result);
if(result.hasErrors()) {
model.addAttribute("reservation",reservation);
return "reservation/reservationForm";
}
reservationService.make(reservation);
status.setComplete();
return "redirect:reservation/reservationSuccess";
}
答案 0 :(得分:5)
当您重定向到reservation/reservationSuccess
时,根据定义,浏览器会向您的网络应用的网址reservation/reservationSuccess
发送新请求。您将在浏览器的地址栏中看到完整的URL。
如果此网址未映射到您的网络应用中的任何servlet,您显然会收到404错误。
您需要了解重定向的重点不是分派到视图(JSP)。重点是让浏览器转到您的Web应用程序中的另一个URL。因此,您在redirect:
前缀之后放置的路径应该是Spring MVC应用程序的操作路径。不是观点的路径。
答案 1 :(得分:1)
您必须在Controller中使用另一种方法来拦截reservation/reservationSuccess
GET请求。
例如:
@RequestMapping(value="reservation/reservationSuccess", method = RequestMethod.GET)
public String getSuccess() {
return "reservation/reservationForm";
}
答案 2 :(得分:0)
“redirect:xxx”正在寻找RequestMapping以匹配重定向字符串xxx,但是,返回“xxx”将查找View Resolver以将该字符串映射到JSP页面。这是主要的区别。