对于相同的REST方法,我们可以有多个@Path注释吗?

@Path相同的REST方法是否可以有多个注释,即执行的方法相同,但是在访问多个URL时执行?

例如:我想searchNames()同时在http://a/b/c和上运行该方法http://a/b

回答:

您不能@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过滤器拦截传入的请求,并即时重写路径。这应该有助于您将所有重定向都放在一个地方。理想情况下,您可以使用现成的库。UrlRewriteFilter只要您拥有BSD许可证就可以解决问题(请查看其Google代码网站以获取详细信息)

另一个选择是通过在Java应用程序前面设置代理来处理此问题。您可以设置一个Apache服务器以提供基本的缓存和重写规则,而不必使Java代码复杂化。

以上是 对于相同的REST方法,我们可以有多个@Path注释吗? 的全部内容, 来源链接: utcz.com/qa/403884.html

回到顶部