2013-05-06 3 views
0

В моем приложении по определенным причинам мне хотелось бы получить значение @RequestMapping в соответствующих методах, однако я не могу найти способ сделать это , Вот более подробно о том, что я хочу:Spring MVC: get RequestMapping значение в методе

Предположим, у меня есть метод, как это:

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

Я хотел бы иметь возможность получить отображение «/ привет» в рамках метода. Я знаю, я могу использовать заполнители в сопоставлении, чтобы получить их значения, когда приходят фактические запросы, но мне нужен конечный набор обрабатываемых запросов, и я не хочу иметь цепочку 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 - одно из самых больших преимуществ аннотированных контроллеров - это то, что вы можете полностью забыть о базовом веб-слое и реализовать их с помощью простых методов без сервлета)

+0

Как вы это сделаете для сопоставления запросов на контроллере? – trusktr

+0

@trusktr, не делайте отображение 'private' и квалифицируйте его с именем класса. '@RequestMapping (MyClass.MAPPING)'. Я вижу еще меньше смысла в этом. –

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