Spring 3 MVC がコントローラから HttpRequest にアクセスする 質問する

Spring 3 MVC がコントローラから HttpRequest にアクセスする 質問する

@SessionAttributesログインや Cookie の処理など、リクエストとセッションの属性を Spring に任せるのではなく、自分で処理したいと思います。

HttpRequestコントローラー内から にアクセスする方法がわかりません。 の上のレイヤーに移動し@RequestAttributeHttpRequest自体にアクセスする方法が必要です。 の Stripes では、 を実装してApplicationContextを呼び出すことでこれを実現していましたgetAttribute()

また、HttpServletRequestas パラメータを渡すことは機能していないようです:

@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 はハンドラー メソッドに自動的に挿入することができます。

おすすめ記事