对于相同的REST方法,我们可以有多个@Path注释吗?
@Path
相同的REST方法是否可以有多个注释,即执行的方法相同,但是在访问多个URL时执行?
例如:我想searchNames()
同时在http://a/b/c
和上运行该方法http://a/b
。
回答:
您不能@Path
在单个方法上具有多个注解。它将导致“重复注释”语法错误。
但是,有多种方法可以有效地将两个路径映射到一个方法。
回答:
@Path
JAX-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