Spring MVC使用不同的HTTP方法转发到控制器

时间:2013-02-13 19:48:28

标签: java spring-mvc

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

@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转到/homehome()的处理程序方法,这是期待的一个GET。

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

这是在Spring 3.2.1上。

1 个答案:

答案 0 :(得分:3)

改为redirect

return "redirect:/home";

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