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

如何在Spring中适配数量未知、无命名的路径变量并获取其列表?

当然可以实现这种需求!你当前的写法只能处理单个路径段的变量,要搞定任意数量路径节点的场景,我们可以用Spring自带的路径匹配规则加一点小技巧来实现,给你两种实用方案:

解决方案

方法一:通过请求对象解析完整路径

这种方式更灵活,能直接拿到所有路径节点:

首先修改你的@RequestMapping路径,用/**匹配所有后续的路径分段,然后借助HttpServletRequest获取路径并拆分:

import org.springframework.web.servlet.HandlerMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@RequestMapping(value = "/**", method = RequestMethod.GET)
public String getMethod(HttpServletRequest request) {
    // 获取当前请求匹配到的完整路径部分
    String matchedPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    
    // 拆分路径为分段,过滤掉空字符串(避免开头的/导致第一个元素为空)
    List<String> ids = Arrays.stream(matchedPath.split("/"))
                             .filter(segment -> !segment.isBlank())
                             .collect(Collectors.toList());
    
    // 在这里处理你的ids列表逻辑
    return "成功获取到" + ids.size() + "个ID:" + String.join(", ", ids);
}

说明

  • HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE是Spring提供的属性,能精准拿到当前请求匹配到的路径部分,不会包含域名、端口这些额外内容。
  • 过滤空字符串是必要的,因为路径以/开头,拆分后第一个元素会是空值,需要剔除。

方法二:用通配符路径变量接收

如果你更倾向于用@PathVariable的方式接收,也可以通过通配符让Spring把所有后续路径作为一个字符串传入,再自行拆分:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@RequestMapping(value = "/{ids:**}", method = RequestMethod.GET)
public String getMethod(@PathVariable("ids") String idsString) {
    // 拆分字符串得到所有ID
    List<String> ids = Arrays.stream(idsString.split("/"))
                             .filter(segment -> !segment.isBlank())
                             .collect(Collectors.toList());
    
    // 处理逻辑
    return "处理结果:" + ids;
}

说明

  • {ids:**}是Spring的Ant风格路径匹配规则,**表示匹配任意数量的路径分段(包括多个/分隔的部分),Spring会把这部分完整路径作为字符串传给idsString。
  • 同样需要过滤空字符串,避免拆分后出现无效元素。

注意事项

  • 建议给这个接口加上更具体的前缀,比如/items/**,避免它覆盖控制器中其他更具体的接口路径(比如如果有/detail接口,/**会优先匹配导致该接口无法访问)。
  • 如果路径中可能包含特殊字符,记得处理编码问题,Spring默认会自动解码路径,但特殊场景下可能需要手动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:57:38