0

複数のMavenアーティファクトを使用してアプリを構築しています。設計上の制限により、アーティファクトの1つは、リクエストにアクセスできないバックエンドであることが意図されています(したがって、@ RequestMappingの使用は許可されていません)。現実には、これらのクラスメソッドのいくつかに直接配線する必要があるリクエストがあります。

私は春にいくつかのディープダイビングをし、それを機能させるために必要なものの半分に出くわしました。簡単な部分は、HandlerMappingを自分で作成し、正しく構成することです。そのマッパーは、必要なURLを手動でマップするためのバックエンドエンティティの知識を持っています。

私が見つけられなかった部分は、Springのどこで(何が)呼び出しを管理するのかということです。たとえば、次の場合:

@Component
@RequestMapping("/mypath")
public class MyStuff
{
   @RequestMapping(value = "/dothis", method = RequestMethod.GET)
   public ResponseEntity<String> doThis(HttpServletRequest request)
   {
   }
}

/ mypath / dothisに対してリクエストが行われると、どのオブジェクトがそのリクエストをインターセプトし、正しいBean内で正しいメソッドを呼び出しますか?私の知る限り、マッパーは特定のBeanにマップされたすべてのURLの文字列配列のみを返します。

4

2 に答える 2

3

高レベルでは、これがフローです。Spring の DispatcherServlet が最初にリクエストを処理します。これは、web.xml ファイルにエントリがあるフローです。

DispatcherServletHandlerAdapters と HandlerMappings のリストを維持し、リクエストのために、各 handlerMapping にハンドラーを要求します

Spring 3.1 では、主要な handlerMapping 実装の 1 つはRequestMappingHandlerMapping、ハンドラーへのリクエスト uri のマッピングを維持する (HandlerMethod最終的には @RequestMapping マップされたメソッドを指す) です。

HandlerMapping からハンドラーが取得されると、DispatcherServlet は各 handlerAdapter に要求を処理できるかどうかを尋ねます (HandlerAdapter.supports api)。処理できる場合、要求は適切な HandlerAdapter にディスパッチされ、最終的に handlerMethod が呼び出されます。Spring 3.1 では、登録されるメインの HandlerAdapter<mvc:annotation-driven/>RequestMappingHandlerAdapter

これは、より深い調査の十分な出発点になると思います。フローをたどる良い方法は、DispatcherServlet にブレークポイントを置き、スタックを介してフローをたどることです。

于 2012-08-15T22:15:06.550 に答える
0

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html

リクエストインターセプターについては、セクション 16.4 を参照してください。それを使用してクラスにマップできるはずです。

于 2012-08-15T22:03:34.810 に答える