2011-12-14 14 views
66

リクエストとセッションの属性を自分で処理するのではなく、例えば@SessionAttributesというバネにして、クッキーのログインなどをしたいと思います。Spring 3 MVCコントローラからHttpRequestにアクセスする

私はちょうど私が、コントローラ内からHttpRequestにアクセスできる方法を見つけ出すカント、私は@RequestAttribute上の層に行くとHttpRequest自体にアクセスするための方法が必要です。ストライプスは、ApplicationContextを実装し、getAttribute()を呼び出してこれを行うのに使用されています。

また、渡すパラメータとしてHttpServletRequestが動作していないようだ。

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

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

これに関するアドバイスはありますか?

答えて

133

あなたは自分のコントローラのメソッドシグネチャに追加した場合の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(...); 

} 

ご覧のとおり、単に署名にHttpServletRequestHttpServletResponseオブジェクトの追加Spring MVCはこれらのオブジェクトをコントローラメソッドに渡します。 HttpSessionオブジェクトも必要です。

EDIT:HttpServletRequest/ResponseがSpring 3の下で働いていないようです.Eduardo Zolaが指摘しているようにSpring WebRequest/WebResponseオブジェクトを使用してみてください。

list of supported argumentsで、Spring MVCが自動的にハンドラメソッドに注入できることを強くお勧めします。

+0

こんにちは、ヒントのためのTHXは、私が間違ってやっている知らないが、これは動作していない:それは何も印刷されません:\t @RequestMapping(値=「/」) \tパブリック文字列の自宅(HttpServletRequestのリクエスト){ \t \t \t System.out.println( "" + request.getSession()。getCreationTime()); \t \t \t \t return "home"; \t \t \t}これは現在の量pof millisであるべきですが、@RequestBodyのメソッドに注釈を付けてもそれ以上のアドバイスは何も変わりませんか?このためのthx – JBoy

+1

私は2番目のJBoyも動作しません –

+1

Spring MVCのサポートされている引数へのリンク@jjmontesありがとう! – Barett

53

私は古い質問ですけど、...

あなたはまた、あなたのクラスでこれを使用することができます。

@Autowired 
private HttpServletRequest context; 

そして、あなたは上の使用のために、これはHttpServletRequestの現在のインスタンスを提供しますあなたの方法。

+3

このようにしないと、コントローラーBeanがシングルトンにならないのですか? – jjmontes

+1

スプリングコントローラは常にシングルトンです。 –

+7

これは間違っています - コントローラーが与えられた時間に複数の要求を処理している場合はどうなりますか?それから、「現在の」要求は何ですか? – sbk

関連する問題