有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这个问题是在我使用JAX-RS构建后端时提出的,但这确实适用于任何RESTAPI

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

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

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

有人想用路径参数small调用第一个端点。在这种情况下会发生什么?如果foo()bar()有不同的parmas(可能像@FormParam),这有助于区分吗?如果他们完全一样,没有争论呢?这种行为是非确定性的吗


共 (1) 个答案

  1. # 1 楼答案

    参考资料:带JAX-RS 2.0的RESTful Java,第二版

    1. "/customers/{id : .+}<;getCustomer
    2. "/customers/{id : .+}/address"<;获取地址

    优先规则

    JAX-RS规范为匹配URI表达式定义了严格的排序和优先规则,并基于最具体的匹配wins算法

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

    您的示例:

    bar()获胜是因为根据规则1,它有更多的文字字符