路径参数查询和静态路径查询之间的 Jersey 优先级?
Jersey priority between path param queries and static path queries?
让我们承认,对于 Jersey,我公开了 2 个查询:
- /你好/{名字}
- /hello/goodby
如果用户执行 /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 在以下条件下按降序排列 -
- 作为主键的文字字符数
- 作为辅助键的路径参数数量
- 作为三元键的正则表达式字符串的数量。
在你的例子中,你只有文字字符和路径参数。
- /hello/goodby - 12 个文字字符和 0 个路径参数。
- /hello/{name} - 4 个文字字符和 1 个路径参数。
根据排序算法,/hello/goodby会排在/hello/{name}之前,/hello/goodby是最匹配的。
让我们承认,对于 Jersey,我公开了 2 个查询:
- /你好/{名字}
- /hello/goodby
如果用户执行 /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 在以下条件下按降序排列 -
- 作为主键的文字字符数
- 作为辅助键的路径参数数量
- 作为三元键的正则表达式字符串的数量。
在你的例子中,你只有文字字符和路径参数。
- /hello/goodby - 12 个文字字符和 0 个路径参数。
- /hello/{name} - 4 个文字字符和 1 个路径参数。
根据排序算法,/hello/goodby会排在/hello/{name}之前,/hello/goodby是最匹配的。