@SessionAttributes
ログインや Cookie の処理など、リクエストとセッションの属性を Spring に任せるのではなく、自分で処理したいと思います。
HttpRequest
コントローラー内から にアクセスする方法がわかりません。 の上のレイヤーに移動し@RequestAttribute
てHttpRequest
自体にアクセスする方法が必要です。 の Stripes では、 を実装してApplicationContext
を呼び出すことでこれを実現していましたgetAttribute()
。
また、HttpServletRequest
as パラメータを渡すことは機能していないようです:
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println(""+request.getSession().getCreationTime());
return "home";
}
上記の方法では何も印刷されません。
これに関して何かアドバイスはありますか?
ベストアンサー1
Spring MVC では、コントローラー メソッド シグネチャに HttpRequest を追加するだけで、HttpRequest が提供されます。
例えば:
/**
* Generate a PDF report...
*/
@RequestMapping(value = "/report/{objectId}", method = RequestMethod.GET)
public @ResponseBody void generateReport(
@PathVariable("objectId") Long objectId,
HttpServletRequest request,
HttpServletResponse response) {
// ...
// Here you can use the request and response objects like:
// response.setContentType("application/pdf");
// response.getOutputStream().write(...);
}
ご覧のとおり、HttpServletRequest
およびHttpServletResponse
オブジェクトをシグネチャに追加すると、Spring MVC はそれらのオブジェクトをコントローラー メソッドに渡すようになります。 オブジェクトHttpSession
も必要になります。
編集: Spring 3 では、HttpServletRequest/Response が動作しない人がいるようです。Eduardo Zola が指摘したように、Spring WebRequest/WebResponse オブジェクトを使用してみてください。
ぜひご覧になることをお勧めしますサポートされている引数のリストSpring MVC はハンドラー メソッドに自動的に挿入することができます。