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

Jersey priority between path param queries and static path queries?

让我们承认,对于 Jersey,我公开了 2 个查询:

如果用户执行 /hello/goodby,Jersey 是否保证将选择请求“/hello/goodby”,而不是名称等于 [的“/hello/{name}” =23=] ?

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

它不会出现在文档中。它将在 JAX-RS Spec 中。查看“3.7.2 请求匹配”部分,在神秘的庞然大物中的某处,您会看到:

Sort E using the number of literal characters in each member as the primary key

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

没错。 /hello/goodby 优先于 /hello/{name} 假设两者处于同一级别,如 class 或方法。

所有匹配的 classes 在以下条件下按降序排列 -

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

在你的例子中,你只有文字字符和路径参数。

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

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