0

私のアプリでは、特定の理由から、対応するメソッドで @RequestMapping の値を取得できるようにしたいのですが、それを行う方法が見つかりません。私が欲しいものの詳細は次のとおりです。

次のようなメソッドがあるとします。

@RequestMapping(value = "/hello")
@ResponseBody
public void helloMethod(AtmosphereResource atmosphereResource) {
...
}

メソッド内でマッピング「/hello」を取得できるようにしたいと考えています。if実際のリクエストが来たときに値を取得するために、マッピングでプレースホルダーを使用できることはわかっていますが、処理可能なリクエストの有限セットが必要であり、メソッドにs またはswitchesのチェーンは必要ありません。

それはまったく可能ですか?

4

2 に答える 2

3

これは事実上同じですよね?

private final static String MAPPING = "/hello";

@RequestMapping(value = MAPPING)
@ResponseBody
public void helloMethod(AtmosphereResource atmosphereResource) {
   // MAPPING accessible as it's stored in instance variable
}

しかし、元の質問に答えるために:それに直接アクセスする方法がなかったとしても、私は驚かないでしょう.コントローラーコードでこの情報にアクセスする正当な理由を考えるのは難しいです(IMOアノテーション付きコントローラーの最大の利点の1つは基礎となる Web レイヤーを完全に忘れて、サーブレットを認識しない単純なメソッドで実装できます)。

于 2013-05-06T09:27:26.733 に答える
1

他のアノテーションを取得する場合と同様に、このメソッドのアノテーション @RequestMapping を取得できます。

 @RequestMapping("foo")
 public void fooMethod() {
    System.out.printf("mapping=" + getMapping("fooMethod"));
 }

 private String getMapping(String methodName) {
    Method methods[] = this.getClass().getMethods();
    for (int i = 0; i < methods.length; i++) {
        if (methods[i].getName() == methodName) {
            String mapping[] = methods[i].getAnnotation(RequestMapping.class).value();
            if (mapping.length > 0) {
                return mapping[mapping.length - 1];
            }
        }
    }
    return null;
}

ここでは、メソッドの名前を明示的に渡します。絶対に必要な場合は、現在のメソッド名を取得する方法についての議論を参照してください:現在実行中のメソッドの名前を取得する

于 2013-05-06T13:08:03.927 に答える