4

我有这样的登录控制器方法:

@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 转到 , 的处理程序方法/homehome()它需要一个 GET。

Spring 中是否有任何方法可以在保持当前模型的同时使用不同的 HTTP 方法重定向到另一个控制器方法(因为我想显示错误消息)?

这是在 Spring 3.2.1 上。

4

1 回答 1

4

redirect改为:

return "redirect:/home";

如果您需要Model在重定向后属性可用,您可以使用flash attributes

于 2013-02-13T20:36:41.107 回答