我有这样的登录控制器方法:
@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";
}
}
上面的代码适用于成功的登录尝试。但是,当登录尝试失败时,它会失败,因为 Springforward
使用相同的 HTTP 方法使用当前请求。因此,因为我使用 POST 发送我的用户名/密码(这导致登录失败),转发也将使用 POST 转到 , 的处理程序方法/home
,home()
它需要一个 GET。
Spring 中是否有任何方法可以在保持当前模型的同时使用不同的 HTTP 方法重定向到另一个控制器方法(因为我想显示错误消息)?
这是在 Spring 3.2.1 上。