2016-10-07 3 views
2

Я создал много controllers того, чтобы каждый их requestmapping указанный для того, чтобы они были определены в приложении:Как получить все requestmapping всех контроллеров?

package com.ambre.hib.controller; 

@Controller 
@RequestMapping("/") 
public class HomeController { 

    ... 

} 

package com.ambre.hib.controller; 

@Controller 
@RequestMapping("/ajax") 
public class AjaxController { 

    ... 

} 

Так как получить программно все значения из requestmappings всех контроллеров в проект? Я хочу получить что-то вроде списка, содержащего, например, «/», «/ ajax».

ответ

0

Вы можете достичь этого, используя Google Guava и API отражения Java.

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>19.0</version> 
</dependency> 

Google Guava включает в себя класс ClassPath с три метода сканирования для классов верхнего уровня, в том, что вы можете использовать getTopLevelClasses(String packageName)

См этот пример кода.

public void getClassOfPackage(String packagenom) { 

    final ClassLoader loader = Thread.currentThread() 
      .getContextClassLoader(); 
    try { 

     ClassPath classpath = ClassPath.from(loader); // scans the class path used by classloader 
     for (ClassPath.ClassInfo classInfo : classpath.getTopLevelClasses(packagenom)) { 
     if(!classInfo.getSimpleName().endsWith("_")){ 
      System.out.println(classInfo.getSimpleName()); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

Ниже код будет печатать все @RequestMapping из одного контроллера, вы можете обновить этот код.

Class clazz = Class.forName("com.abc.cbe.rest.controller.MyController"); // or list of controllers, //you can iterate that list 
    for(Method method :clazz.getMethods()){ 
     for(Annotation annotation :method.getDeclaredAnnotations()){ 
      if(annotation.toString().contains("RequestMapping")) 
      System.out.println("Annotation is..."+ annotation.toString()); 
    } 
    } 
+0

Метод 'getClassOfPackage' не работает: на консоли нет выхода! Я уже добавил зависимость в pom.xml и обновил проект. – pheromix

+0

Я тестировал этот код, прежде чем делиться здесь, вы отлаживали? –

+0

Какие строки следует отлаживать? – pheromix