Cookie処理のログインなどのために、@SessionAttributes
をスプリングに任せるのではなく、自分でリクエストとセッションの属性を処理したいと思います。
コントローラー内からどのようにHttpRequest
にアクセスできるかわかりません。@RequestAttribute
の上のレイヤーに移動してHttpRequest
自体にアクセスする方法が必要です。 ApplicationContext
を実装してgetAttribute()
を呼び出すことにより、これを行うためにStripesを使用します。
また、パラメータとしてHttpServletRequest
を渡すことは機能していないようです:
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println(""+request.getSession().getCreationTime());
return "home";
}
上記の方法では何も印刷されません。
これについて何かアドバイスはありますか?
コントローラーメソッドシグネチャに追加するだけで、Spring MVCは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
オブジェクトも必要になります。
編集:HttpServletRequest/Responseは、Spring 3で動作しない人がいるようです。EduardoZolaが指摘したように、Spring WebRequest/WebResponseオブジェクトを使用してみてください。
サポートされている引数のリスト をご覧になることを強くお勧めします。SpringMVCはハンドラーメソッドに自動的にインジェクトできます。
これは古い質問ですが、...
クラスでこれを使用することもできます:
@Autowired
private HttpServletRequest context;
そして、これはメソッドで使用するHttpServletRequest
の現在のインスタンスを提供します。
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println("My Attribute :: "+request.getAttribute("YourAttributeName"));
return "home";
}