Spring mvc SpringMVC:在方法中获取RequestMapping值

Spring mvc SpringMVC:在方法中获取RequestMapping值,spring-mvc,Spring Mvc,在我的应用程序中,出于某些原因,我希望能够在相应的方法中获取@RequestMapping的值,但是,我找不到一种方法来实现这一点。以下是关于我想要什么的更多细节: 假设我有这样一个方法: @请求映射(value=“/hello”) @应答器 公共无效helloMethod(大气资源大气资源){ ... } 我希望能够在方法中获得映射“/hello”。我知道,我可以在映射中使用占位符,以便在实际请求到来时获取它们的值,但我需要一组有限的可处理请求,并且我不希望在我的方法中出现一系列ifs或s

在我的应用程序中,出于某些原因,我希望能够在相应的方法中获取@RequestMapping的值,但是,我找不到一种方法来实现这一点。以下是关于我想要什么的更多细节:

假设我有这样一个方法:

@请求映射(value=“/hello”)
@应答器
公共无效helloMethod(大气资源大气资源){
...
}

我希望能够在方法中获得映射“/hello”。我知道,我可以在映射中使用占位符,以便在实际请求到来时获取它们的值,但我需要一组有限的可处理请求,并且我不希望在我的方法中出现一系列
if
s或
switch
es

有可能吗?

这实际上是一样的,不是吗

private final static String MAPPING = "/hello";

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

但要回答最初的问题:如果没有直接的方法访问这些信息,我不会感到惊讶,很难找到在控制器代码中访问这些信息的正当理由(在我看来,带注释控制器的最大好处之一是,您可以完全忘记底层的web层,并使用简单的、不支持servlet的方法来实现它们)

这实际上是一样的,不是吗

private final static String MAPPING = "/hello";

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


但要回答最初的问题:如果没有直接的方法访问这些信息,我不会感到惊讶,很难找到在控制器代码中访问这些信息的正当理由(在我看来,带注释控制器的最大好处之一是,您可以完全忘记底层web层,并使用普通的、不支持servlet的方法实现它们)

您可以获得此方法的annotation@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;
}
@RequestMapping(“foo”)
公共方法(){
System.out.printf(“mapping=“+getMapping(“foodmethod”));
}
私有字符串getMapping(字符串方法名){
方法方法[]=this.getClass().getMethods();
for(int i=0;i0){
返回映射[mapping.length-1];
}
}
}
返回null;
}

这里我显式地传递方法的名称。如果绝对必要,请参阅关于如何获取当前方法名称的讨论:

您可以像获取任何其他注释一样获取此方法的注释@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;
}
@RequestMapping(“foo”)
公共方法(){
System.out.printf(“mapping=“+getMapping(“foodmethod”));
}
私有字符串getMapping(字符串方法名){
方法方法[]=this.getClass().getMethods();
for(int i=0;i0){
返回映射[mapping.length-1];
}
}
}
返回null;
}

这里我显式地传递方法的名称。如果绝对必要,请参阅关于如何获取当前方法名称的讨论:

对于控制器上的请求映射,如何执行此操作?@trusktr,不要将映射设置为私有的,并使用类名限定它。
@RequestMapping(MyClass.mapping)
。我认为这样做没有什么意义。对于控制器上的请求映射,您如何做到这一点?@trusktr,不要将映射
设为私有
,并用类名限定它。
@RequestMapping(MyClass.mapping)
。但我认为这样做没有什么意义。