REST路径参数与资源路径冲突?

时间:2020-06-19 20:33:09

标签: java api rest jax-rs

当我使用JAX-RS构建后端时出现了这个问题,但这确实可以应用于任何REST API。

JAX-RS如何处理由于参数路径变量而可能冲突的路径?假设你有

@POST
@Path('createBox/{boxName}')
foo()

@POST
@Path('createBox/small')
bar()

有人想使用路径参数small来调用第一个端点。在这种情况下会发生什么?如果foo()bar()具有不同的Parma(也许像@FormParam),这将有助于区分吗?如果它们完全相同且没有参数怎么办?行为是不确定的吗?

1 个答案:

答案 0 :(得分:1)

参考文献:带有JAX-RS 2.0的RESTful Java,第二版,作者是Bill Burke

  1. "/customers/{id : .+} <-getCustomer
  2. "/customers/{id : .+}/address" <-getAddress

优先级规则

JAX-RS规范已经定义了用于匹配URI表达式的严格排序和优先级规则,并且基于最特定的match wins算法。

  1. 排序的主键是完整URI匹配模式中文字字符的数量,并以降序排列(getCustomer中为11,而getAddress中为18)
  2. 排序的次要键是模式中嵌入的模板表达式的数量,即{id}{id : .+}。这种排序是降序排列。
  3. 排序的三级键是非默认模板表达式的数量。默认模板表达式是未定义正则表达式的模板表达式,即{id}

您的示例:

bar()之所以获胜,是因为按照规则1,它具有更多的文字字符