Mic*_*jan 3 java rest jax-rs jersey jersey-2.0
当我有一个非常基本的Application
. Jersey 时,它会自动发现项目中的所有 REST 资源,而我不必手动注册它们:
import javax.ws.rs.ApplicationPath;
@ApplicationPath("/rest")
public class Application extends javax.ws.rs.core.Application {
}
Run Code Online (Sandbox Code Playgroud)
但是当我切换到使用 Jersey specific 时ResourceConfig
,自动发现似乎不起作用。我必须#registerClasses()
或者添加如下所示的包:
@ApplicationPath("rest")
public class ResourceConfig extends org.glassfish.jersey.server.ResourceConfig {
public ResourceConfig() {
super();
register(RolesAllowedDynamicFeature.class);
super.packages(true, "org.example");
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法ResourceConfig
自动发现 REST 资源,例如Application
无需单独注册类或添加应用程序包?
这是交易:导致类路径扫描的原因是一个没有注册任何东西的Application
类。所以在你的(它扩展)中,如果你没有注册,你会得到类路径扫描。我的猜测是您切换到以便您可以注册(可能来自您看到的某些示例)。这也可以通过覆盖. 但是就像我说的,一旦你注册了任何东西,你就会失去类路径扫描,你需要手动注册所有东西。ResourceConfig
Application
RolesAllowedDynamicFeature
ResourceConfig
RolesAllowedDyanamicFeature
Application
getClasses()
一种解决方法是实现一个Feature
注册所有类,否则类路径扫描不会选择这些类。
@Provider
public class ClassPathScanWorkAroundFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
context.register(RolesAllowedDynamicFeauture.class);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这将适用于该类Application
或ResourceConfig
该类。在类路径扫描期间会发生什么,Jersey 将同时查找@Path
和 @Provider
注解的类来注册。因此,这是找到一种手动注册内容并仍然保持类路径扫描的解决方法。
我要指出的一件事是 Jersey 的一位开发人员撰写的以下文章。
基本上他们建议永远不要使用它。我个人只会坚持包扫描。我不认为这真的让生活变得更加困难。它实际上是少的代码,比使用的替代Feature
。
归档时间: |
|
查看次数: |
2593 次 |
最近记录: |