120

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

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

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

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

上記の方法では何も出力されません。

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

4

4 に答える 4

211

コントローラーメソッドの署名に追加するだけで、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ご覧のとおり、オブジェクトとオブジェクトを署名に追加するだけで、HttpServletResponseSpring MVC はそれらのオブジェクトをコントローラー メソッドに渡します。HttpSessionオブジェクトも必要になります。

編集: Spring 3 で HttpServletRequest/Response が機能しない人もいるようです。Eduardo Zola が指摘したように、Spring WebRequest/WebResponse オブジェクトを使用してみてください。

Spring MVC が自動的にハンドラー メソッドに挿入できる、サポートされている引数のリストを確認することを強くお勧めします。

于 2011-12-14T12:19:58.407 に答える
86

私はそれが古い質問であることを知っていますが...

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

@Autowired
private HttpServletRequest context;

これにより、メソッドで使用する for の現在のインスタンスが提供HttpServletRequestされます。

于 2013-04-10T23:58:34.263 に答える