gpt4 book ai didi

java - 通过包名扫描resteasy资源

转载 作者:行者123 更新时间:2023-12-02 04:29:49 24 4
gpt4 key购买 nike

我正在配置我的 Resteasy 应用程序,需要关闭自动扫描(两个 jaxrs 应用程序位于类路径中,并且在加载时中断)

因此,我将 web.xml 配置如下:

    <context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>

<context-param>
<param-name>resteasy.resources</param-name>
<param-value>
io.swagger.jaxrs.listing.ApiListingResource,
com.mycompany.resource.ClientResource,
com.mycompany.resource.AccountResource,
... etc
</param-value>
</context-param>

在resteasy中是否有任何方法可以通过包(com.mycompany.resource.*)名称进行扫描,而不必添加每个资源?看来 jaxrs 是可能的,但不轻松

最佳答案

文档非常清楚:

A comma delimited list of fully qualified JAX-RS resource class names you want to register

您可以使用 reflections 自行实现此功能图书馆。假设以下文本文件:

com.foo.bar.TestResource
com.foo.baz.*

我们可以在Application类中读取这个文本文件,搜索所有类并将其添加到getClasses返回的Set中:

@ApplicationPath("/")
public class RestApplication extends Application {

Set<Class<?>> classes;

public RestApplication(@Context ServletContext servletContext) {
classes = new HashSet<>();
try {
URI resourcesConfig = servletContext.getResource("/WEB-INF/resources.txt").toURI();
List<String> resources = Files.readAllLines(Paths.get(resourcesConfig), Charset.forName("UTF-8"));
for (String resource : resources) {
parseResources(resource);
}
} catch (IOException | URISyntaxException | ClassNotFoundException ex) {
throw new IllegalArgumentException("Could not add resource classes", ex);
}
}

private void parseResources(String resource) throws ClassNotFoundException, IOException {
if (!resource.endsWith(".*")) {
classes.add(Class.forName(resource));
return;
}
String pkg = resource.substring(0, resource.length() - 2);
Reflections reflections = new Reflections(pkg);
for (Class<?> scannedResource : reflections.getTypesAnnotatedWith(Path.class)) {
classes.add(scannedResource);
}
}

@Override
public Set<Class<?>> getClasses() {
return classes;
}

}

注意:我们仅在类级别添加带有 @Path 注释的资源。

关于java - 通过包名扫描resteasy资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31614046/

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