You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何UriInfo.getPathParameters()返回MultivaluedMap?

JAX-RS中getPathParameters()返回多值的规范与场景

一、规范相关规定

JAX-RS规范(如JSR-370)允许在@Path URI模板中重复使用同一参数名称,要求实现类将每个匹配到的URI片段值按顺序存入MultivaluedMap对应参数名的列表中。

比如使用@Path("{id}/details/{id}")模板时,若请求URI为/123/details/456,getPathParameters().get("id")会返回包含"123"和"456"的列表。规范并未禁止重复参数名的使用,反而明确了这种场景下的处理逻辑。

二、产生多值的场景

除了你提到的单个@Path注解内重复参数名(如@Path("{foo}/bar/{foo}")),还有另一种场景:

嵌套资源类的同名路径参数

当父资源类和子资源类的@Path注解使用相同参数名时,请求URI匹配到的所有层级的对应值都会被收集。示例:

// 父资源类
@Path("/users/{userId}")
public class UserResource {
    @Path("/orders/{userId}")
    public OrderResource getOrderResource() {
        return new OrderResource();
    }
}

当请求/users/123/orders/456时,getPathParameters().get("userId")会返回包含"123"和"456"的列表,两个层级的参数值都会被存入映射。

除此之外,不存在其他会导致单个路径参数名对应多个值的场景。比如路径参数使用正则表达式匹配多段内容(如@Path("{id:.+}")),只会生成一个完整的匹配值,不会拆分存入多值列表。

内容的提问来源于stack exchange,提问作者Seva Safris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:15:29