2013-05-06 118 views
0

在我的应用程序中,由于某些原因,我希望能够在相应的方法中获得@RequestMapping的值,但是,我找不到一种方法来执行此操作。以下是关于我想要的更多详细信息:Spring MVC:在方法中获取RequestMapping值

想,我有这样的方法:

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

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

是否有可能?

回答

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不知道的方法实现它们)

+0

如何对控制器上的请求映射执行此操作? – trusktr 2014-03-16 05:48:45

+0

@trusktr,不要使映射'私人'和资格与类名称。 '@RequestMapping(MyClass.MAPPING)'。尽管如此,我看到更少的观点。 – 2015-12-13 22:54:07

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; 
} 

这里我明确地传递方法的名字。请参阅有关如何获取当前方法名称的讨论,如果在此处绝对需要:Getting the name of the current executing method

相关问题