我有这样的登录控制器方法:
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
// do stuff with locale and model
// return an html page with a login form
return "home";
}
@RequestMapping(value = "/account/login", method = RequestMethod.POST)
public String login(Model model, /* username + password params */){
try {
// try to login
// redirect to account profile page
return "redirect:/account/profile";
} catch (LoginException e) {
// log
// here I want to reload the page I was on but not with a url /account/login
// possibly using a forward
model.addAttribute("error", e.getMessage());
return "forward:/home";
}
}
以上代码适用于成功登录尝试。但是,当登录尝试失败时,它会失败,因为Spring的forward
使用具有相同HTTP方法的当前请求。因为我使用POST发送我的用户名/密码(导致登录失败),转发也将使用POST转到/home
,home()
的处理程序方法,这是期待的一个GET。
在Spring中是否有任何方法可以使用不同的HTTP方法重定向到另一个控制器方法,同时保持当前模型(因为我想显示错误消息)?
这是在Spring 3.2.1上。
答案 0 :(得分:3)