web-dev-qa-db-ja.com

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

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

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

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

@RequestMapping(value="/") public String home(HttpServletRequest request){
    System.out.println(""+request.getSession().getCreationTime());
    return "home"; 
}

上記の方法では何も印刷されません。

これについて何かアドバイスはありますか?

88
JBoy

コントローラーメソッドシグネチャに追加するだけで、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はハンドラーメソッドに自動的にインジェクトでき​​ます。

160
jjmontes

これは古い質問ですが、...

クラスでこれを使用することもできます:

@Autowired
private HttpServletRequest context;

そして、これはメソッドで使用するHttpServletRequestの現在のインスタンスを提供します。

66
@RequestMapping(value="/") public String home(HttpServletRequest request){
    System.out.println("My Attribute :: "+request.getAttribute("YourAttributeName"));
    return "home"; 
}
0
SaiSudha HG