3

SpringMVCアプリにいくつかのメトリック収集を追加しようとしています。マッピングが次のコントローラーがあるとします。

 /User/{username}/Foobar

パスを使用したすべてのコントローラーマッピング呼び出しのメトリックを収集したいと思います。今、私はハンドラー/インターセプターを作成してリクエストを見ることができますが、それは私に次のことを与えます:

/User/Charlie/Foobar

それは私が望むものではありません。コントローラのマッピング自体をログに記録したい。そして、すべてのコントローラーに何かを追加する必要はありません。また、私がそれを助けることができれば、私はむしろAOPを使用したくありません。

4

2 に答える 2

3

Springは、リクエスト自体に最も一致するコントローラーパターンをハングさせていることがわかりました。これは、次のようなハンドラーインターセプター内から取得できます。

 (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE)
于 2013-01-22T20:06:07.690 に答える
2

私は2つの選択肢を考えることができます:

  1. マッチングの結果は、取得したパターンをログに記録するクラスorg.springframework.web.servlet.handler.AbstractUrlHandlerMappingで取得されているように見えます(266行目を参照)。そのクラスのロギングを有効にして、出力が目的に役立つかどうかを確認してみます。

  2. (複雑)

    継承されorg.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMappingたメソッドをオーバーライドするために拡張し、必要なものをログに記録/登録します。このクラスのドキュメントに従って、が自分のバージョンを使用するように別のドキュメントを登録できます。lookupHandlerAbstractUrlHandlerMappingDispatcherServlet

    Spring 3.2.xDefaultAnnotationHandlerMappingは非推奨であるため、別のクラスを使用する必要があります。

于 2013-01-11T19:34:00.217 に答える