9

Spring フォーラムと StackOverflow を検索して、この質問に対する答えを見つけようとしました。恐ろしいアーキテクチャを説明し、私とほぼ同じことを求めているページをたくさん見つけましたが、意図した使用法は異なるので、ご容赦ください:-)

基本的に次のようなアノテーションベースのフォームコントローラーを使用するSpring 2.5プロジェクトがあります。

@RequestMapping("/edit/someObject")
public String handleSubmit(HttpServletRequest request, HttpServletResponse response, SomeObject someObject, BindingResult result) {

    // Some check here

    if(result.hasErrors()) {
        return "form";
    } else {
        SomeObjectService.update(someObject);
        return "redirect:/view/someObject";
    }
}

ここでは、HttpServletRequest でいくつかの http プロパティをチェックし、このプロパティに特定の値がある場合は HttpServletResponse を使用してリダイレクトを送信します。このチェックは、このアプリケーションのフォーム コントローラの多く (すべてではない) で行われます。私がやりたいことは、このチェックを行うための AOP アドバイスによって処理される @CheckedSubmit アノテーションを作成し、コントローラーから HttpServletRequest および HttpServletResponse パラメーターを削除することです。

私の問題は、これら2つを注釈付きメソッドへの(未使用の)パラメーターとして使用せずに、このAOPアドバイスから現在のHttpServletRequestとHttpServletResponseにアクセスする方法がわからないことです。これは、最初に回避しようとしたことです。

概要: @RequestMapping アノテーション付きメソッドで AOP アドバイスから HttpServletRequest/Response にアクセスする方法は?

4

2 に答える 2

13

要約のための2つの解決策ですが、問題全体に対するものではありません(完全に)

解決策1:内部アドバイス(> = Spring 2.0が必要)

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
        .getRequestAttributes()).getRequest();

解決策2:アスペクトクラス内(おそらく、シングルトンBean内のSpring 3.0が必要です!)

@Autowired(required=true)
private HttpServletRequest request;
于 2009-11-25T10:23:13.450 に答える
3

おそらくすでにご存知だと思いますが、Spring MVS でこれを行う「公式」は、HandlerInterceptors を使用することでした。それらは注釈駆動型ではありませんが、HTTP 制御フローに挿入され、要求と応答へのフル アクセスを取得します。

于 2009-06-10T20:16:39.210 に答える