您不能
@Path在单个方法上具有多个注解。它将导致“重复注释”语法错误。
但是,有多种方法可以有效地将两个路径映射到一个方法。
@Path批注中的正则表达式
@PathJAX-RS中的注释接受参数,可以使用正则表达式限制其值。
此注释:
@Path("a/{parameter: path1|path2}")将使同时针对
/a/path1和的请求都可以访问该方法
/a/path2。如果您需要使用子路径,请使用斜杠转义:
{a:path1\/subPath1|path2\/subPath2}使用重定向状态代码提供响应
或者,您可以设置重定向。这是通过定义另一个子资源在Jersey(JAX-
RS的参考实现)中进行操作的方法。这只是一个示例,如果您喜欢使用其他方法来处理重定向,请随时使用它。
@Path("basepath")public class YourbaseResource { //this gets injected after the class is instantiated by Jersey @Context UriInfo uriInfo; @Path("a/b") @GET public Responce method1(){ return Response.ok("blah blah").build(); } @Path("a/b/c") @GET public Response method2(){ UriBuilder addressBuilder = uriInfo.getbaseUriBuilder(); addressBuilder.path("a/b"); return Response.seeOther(addressBuilder.build()).build(); }}使用Servlet过滤器重写URL
如果您经常需要这种功能,建议您使用Servlet过滤器拦截传入的请求,并即时重写路径。这应该有助于您将所有重定向都放在一个地方。理想情况下,您可以使用现成的库。
UrlRewriteFilter只要您拥有BSD许可证就可以解决问题(请查看其Google代码网站以获取详细信息)
另一个选择是通过在Java应用程序前面设置代理来处理此问题。您可以设置一个Apache服务器以提供基本的缓存和重写规则,而不必使Java代码复杂化。



