gpt4 book ai didi

spring - 如何获取所有 Controller 的所有请求映射?

转载 作者:行者123 更新时间:2023-12-02 07:00:10 25 4
gpt4 key购买 nike

我创建了许多 Controller ,并指定了每个 Controller 的请求映射,以便在应用程序中识别它们:

enter image description here

package com.ambre.hib.controller;

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

...

}

package com.ambre.hib.controller;

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

...

}

那么如何以编程方式获取项目中所有 Controller 的请求映射的所有值?我想要得到类似列表的内容,例如包含“/”、“/ajax”。

最佳答案

您可以使用 Google GuavaJava Reflection API 来实现此目的。

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

}

下面的代码将从单个 Controller 打印所有@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());
}
}

关于spring - 如何获取所有 Controller 的所有请求映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39916987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com