私は次のようなログインコントローラメソッドを持っています:
@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";
}
}
上記のコードは、ログイン試行が成功した場合に機能します。forward
ただし、Springは同じHTTPメソッドで現在のリクエストを使用するため、ログインの試行が失敗すると失敗します。したがって、POSTを使用してユーザー名/パスワードを送信したため(ログインが失敗しました)、転送はPOSTを使用して、のハンドラーメソッドに移動し/home
ますhome()
。これはGETを期待しています。
現在のモデルを維持しながら(エラーメッセージを表示したいので)、Springで別のHTTPメソッドを使用して別のコントローラーメソッドにリダイレクトする方法はありますか?
これはSpring3.2.1にあります。