我想将一个简单的 JAX-RS 项目从 Jetty 迁移到 OpenLiberty。 问题在于 ResourceConfig 类(Jersey 的)的两个方法,它们在构造函数末尾调用以配置服务器。如何在 OpenLiberty 中实现它?我认为正确配置 server.xml 可能就足够了。有什么建议吗? (JAX-RS 项目托管于此处)
@ApplicationPath("/api/*")
public class Application extends ResourceConfig {
public Application() {
//
// jakarta.ws.rs.core.Feature feature = ...
//
register(feature);
packages("io.agrest.example.api");
}
}
首先,您需要扩展
javax.ws.rs.core.Application
/jakarta.ws.rs.core.Application
而不是 ResourceConfig
。
其次,您需要通过将适当的功能添加到
server.xml
元素来启用 <featureManager>
中适当的 JAX-RS 功能。
以下是基于 EE 版本的 JAX-RS 功能列表:
jaxrs-2.0
jaxrs-2.1
restfulWS-3.0
restfulWS-3.1
restfulWS-4.0
示例:
<server>
<featureManager>
<feature>jaxrs-2.0</feature>
</featureManager>
</server>
最后,您需要注册您的 JAX-RS 资源/提供程序。
默认情况下,JAX-RS 将扫描您的应用程序以查找带有
@Provider
或 @Path
注释的类并自动注册它们。
如果您想要更多控制,可以使用(旧版)
Application.getClasses()
或 Application.getSingletons()
方法来注册提供程序和单例。这对于防止自动注册可能包含在捆绑的第三方依赖项中的 JAX-RS 提供程序很有用。
示例:
@ApplicationPath("/")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(MyResource.class);
return classes;
}
}