0

在我的应用程序中,由于某些原因,我希望能够在相应的方法中获取 @RequestMapping 的值,但是,我找不到这样做的方法。以下是有关我想要的更多详细信息:

假设,我有这样的方法:

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

我希望能够在方法中获取映射“/hello”。我知道,我可以在映射中使用占位符以便在实际请求到来时获取它们的值,但是我需要一组有限的可处理请求,并且我不希望在我的方法中使用ifs 或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 注释控制器的最大好处之一是您可以完全忘记底层的 Web 层并使用普通的、不支持 servlet 的方法来实现它们)

于 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 回答