如何在 WAR 中公开两个具有相同路径的 JAX-RS 资源

How can I expose two JAX-RS resources with the same path inside a WAR

在 WAR 文件中,我添加了 2 个具有 JAX-RS 资源的不同 JAR。 我添加了一个 ResourceConfig subclass 来注册这 2 个 JAR 中的所有资源。 但是在这两个 JAR 中,一个资源具有相同的名称。是否可以通过 ResourceConfig class 中的 register 方法更改路径名,或者我可以更改资源路径并将其赋予另一个名称的任何其他方式?

我无法创建多个@ApplicaionPath。

在 JAR 1 中:

@Path("product")
public class ProductApi(){
    ......
}

在 JAR 2 中:

@Path("product")
public class ProductApi(){
    ......
}

在WAR

@ApplicationPath("api")
public class MainAPi extends ResourceConfig {
    packages(jar1.apis);
    packages(jar2.apis);
}

所以冲突是ProductApi。只有一个有效,因为它共享相同的路径 /api/product

那么如何从 MainApi 路由到不同的 ProductApi? 或者有没有其他方法可以在不修改 JAR 的情况下更改它?

您可以尝试定义两个 ResourceConfig:

@ApplicationPath("api1")
public class MainApiOne extends ResourceConfig {
    packages(jar1.apis);
}

@ApplicationPath("api2")
public class MainApiTwo extends ResourceConfig {
    packages(jar2.apis);
}

因此,/api1/product 访问 JAR 1 中的资源,/api2/product 访问 JAR 2 中的资源

我从 https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest/user-guide.html#d0e10848

Resource jar1ProductApi = Resource.builder(Jar1.ProductApi.class).path("newpath/product").build();
registerResources(jar1ProductApi);

我将其添加到主 ResourceConfig 文件中,现在它通过新的 URL route(newpath/product)

调用