路径参数查询和静态路径查询之间的泽西优先级?

时间:2017-10-19 12:01:43

标签: api parameters path jersey

让我们承认,在泽西岛,我公开了两个查询:

  • /你好/ {名称}
  • /你好/离别

如果用户执行/ hello / goodby,泽西岛是否保证将选择“/ hello / goodby”请求而不是“/ hello / {name}”且名称等于“goodby”?< / p>

我在我公开的服务中有这样的情况,似乎总是选择静态路径,但我在文档中寻找一种确认,我在这里看不到任何内容:https://jersey.github.io/documentation/latest/jaxrs-resources.html#d0e2271

2 个答案:

答案 0 :(得分:1)

它不会出现在文档中。它将在JAX-RS Spec中。请查看“3.7.2请求匹配”部分,以及隐秘的mumbo jumbo中的某个地方,您将看到:

  

使用每个成员中的文字字符数作为主键对 E 进行排序

E 是迄今为止基于路径的合格方法。这意味着应优先考虑具有最多文字字符的路径。在你的情况下,这就是/hello/goodbye总是获胜的原因。 goodbye是字面字符,而{name}字面字符,它是捕获组

答案 1 :(得分:0)

是正确的。假设/ hello / goodby的优先级高于/ hello / {name},前提是两者均位于同一级别,如类或方法。

在以下条件下,所有匹配类均按降序排序-

  1. 文字字符作为主键的数量
  2. 路径参数的数量作为辅助键
  3. 作为三进制键的正则表达式字符串数。

就您而言,您只有文字字符和路径参数。

  • / hello / goodby-12个文字字符和0个路径参数。
  • / hello / {name}-4个文字字符和1个路径参数。

根据排序算法,/ hello / goodby将在/ hello / {name}之前,而/ hello / goodby是最佳匹配。