当前位置: 首页 > 面试题库 >

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

牟星火
2023-03-14
问题内容

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

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


问题答案:

您不能@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代码复杂化。



 类似资料:
  • 我有一个带有postgresql数据库Hibernate注释的JAVA POJO类。 现在,我需要在应用程序中支持多个数据库。我的问题是:我们应该在其他数据库(Oracle、MySQL、SQL Server)中使用同一个类,还是应该为每个不同的数据库编写单独的注释类? 原因:为了支持特殊字符,我们使用数据库专有类型,而不是像这样的hibernate类型

  • 问题内容: 我试图在一个元素上拍两个或多个相同类型的注释,在这种情况下是方法。这是我正在使用的近似代码: 编译以上内容时,javac抱怨重复的注释: 这样根本不可能重复注释吗?从学步上讲,上面的两个@Foo实例是否由于内容不同而不同吗? 如果上述方法不可行,有哪些可能的解决方法? 更新:我被要求描述我的用例。开始。 我正在建立一种语法糖化机制,以“映射” POJO到文档存储(例如MongoDB)。

  • 团队 我想使用Powermock私有空方法来模拟下面的方法ToMock(int参数1、字符串参数2、int参数3){} 我在下面尝试了一个不起作用的示例类spyObject=PowerMockito。spy(新SampleClass());PowerMockito。doNothing()。当(间谍对象,“methodToMock”,

  • 问题内容: 我试图测试从工厂生成的两个对象是否相同,但是编译器似乎不允许对仅符合同一协议的对象进行身份检查。但是,将两个对象都转换为AnyObject似乎很好。无论如何,有必要避免似乎不必要的转换? 这是一个简单的示例,演示了我所看到的内容(快速1.2) 问题答案: 身份运算符只能应用于 引用 ,即 类的 实例。如果所有符合协议的类型都是类,则可以将其声明为“类协议” 然后 编译并按预期工作,因为

  • 我想从多个SQS队列中触发一个lambda函数。lambda将进行的大部分处理都是相同的,只是一个小步骤将基于表名。我不想为此保留两个单独的lambda。拥有相同/多个lambda的利弊是什么?

  • 是否允许在一个方法中使用多个@scheduled注释?