如何在 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)
调用
在 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)
调用