2009-08-24 2 views
4

私は、Spring MVCのコントローラの実装を使用してアノテーションステレオタイプ@Controllerを使用するコードを移行しています。プログラム的に@Controllerを呼び出します

リクエスト/レスポンスが与えられると、アノテーションベースのコントローラのリクエストをプログラムで処理するにはどうすればよいですか?

以前は、(実装に関係なく)私が呼び出すことができました:

controller.handleRequest(request, response) 

注釈と同等ですか?私はの線に沿っていくつかの(?おそらく静的)ユーティリティクラスが存在することになると想定していた:@Controllerステレオタイプで許可されたダイナミックな署名への要求のマッピングの詳細を処理するために

SpringAnnotationBasedControllerUtils.handleRequest(<? extends @Controller> handlerObject, HttpServletRequest request, HttpServletResponse response); 

が、私がすることはできませんそのようなものを見つける。

提案がありますか?

(これは悪い考えで、「良い」デザインなどでは不要なコメントはしないでください。これは保守中のコードであり、できるだけ非侵襲的でなければならないため、完全な書き換えはオプションではありませんこの時点で)

ありがとう!

答えて

3

オブジェクトのメソッドを呼び出すだけです。これは注釈主導のコントローラの大きな利点の1つです。インタフェースに適合するように形状を曲げなくても、コードが必要とするメソッドだけを書くことができます。したがって、コントローラBeanをコードに配線し、メソッドを直接呼び出してください。

また、Springが要求を注釈付きコントローラにマップするメカニズムを再構築したいと言っていますか?もしそうなら、SpringのAnnotationMethodHandlerAdapterDefaultAnnotationHandlerMappingクラスのソースを見てください。複雑なのですが、アノテートされたコントローラはコントローラの作成を容易にしますが、その根底にあるメカニズムは不愉快です。

+0

私はHandlerInterceptorを持っているため、コントローラの小さなサブセットを手動で呼び出さなければならないため、基本的にコントローラインターフェイスを再導入する必要があります。 AnnotationMethodHandlerAdapterが必要なことをするようですね!ありがとうございました! –

2

Springには、要求とコントローラの実装をとり、それを呼び出す何かがHandlerAdapterと呼ばれています。これは、他のフレームワークのコントローラをSpringで再利用できるようにするためです。 AnnotationMethodHandlerAdapterが必要です。

HandlerAdapter adapter = new AnnotationMethodHandlerAdapter(); 
ModelAndView modelAndView = adapter.handle(request, response, controller); 

私はこれと同じようなことをしていますが、私は何か本質的なものを残さないかどうかはわかりません。

0

このような汎用的なハンドル動作を簡単に行うための独自のインターフェイスを導入することができます。ただし、書き直しを考えれば、プログラマチックに何を探していますか?例えばどのような意思決定ツリー - 組み込みのパラメータマッピングはかなり柔軟です。

関連する問題