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

URL端点路径参数含斜杠字符导致后端抛NotFoundException如何修复

问题解决方案

你遇到的是路径参数包含特殊字符/导致Spring路由匹配错误的问题,可根据实际业务场景选择以下任意一种方案修复:

方案1:调整路径匹配规则+前端参数编码

改动最小,不需要调整现有接口的请求方式:

  • 前端侧:构造URL时对invoice_number做URL编码,把/转义为%2F,修改代码如下:
var url = 'Url' + 'info/' + '/getInstallmentScheduleInfoList/' + encodeURIComponent(invoice_number);
  • 后端侧:修改路径占位符的匹配规则,用正则匹配允许参数包含斜杠,同时手动解码参数即可:
@RequestMapping(value = "/getInstallmentScheduleInfoList/{installmentInvoiceNumber:.+}", method = RequestMethod.GET)
public @ResponseBody
List<RecordWrapper<InstallmentScheduleInfo>> getInstallmentScheduleInfoList(@PathVariable String installmentInvoiceNumber) {
    // 解码前端编码后的参数
    installmentInvoiceNumber = URLDecoder.decode(installmentInvoiceNumber, StandardCharsets.UTF_8);
    // 后续沿用原有业务逻辑即可
}

该方案完全兼容原有GET请求的调用逻辑,不需要调整其他对接逻辑

方案2:改为Query参数传递

是最稳定的推荐方案,完全规避路径特殊字符问题:

  • 前端侧:把参数从路径移到URL问号后缀中,修改代码如下:
var url = 'Url' + 'info/' + '/getInstallmentScheduleInfoList?installmentInvoiceNumber=' + encodeURIComponent(invoice_number);
  • 后端侧:把@PathVariable注解替换为@RequestParam,去掉路径中的参数占位符:
@RequestMapping(value = "/getInstallmentScheduleInfoList", method = RequestMethod.GET)
public @ResponseBody
List<RecordWrapper<InstallmentScheduleInfo>> getInstallmentScheduleInfoList(@RequestParam String installmentInvoiceNumber) 

Spring会自动完成参数解码,不需要额外处理特殊字符

方案3:改为POST请求传递参数

如果参数还存在其他特殊字符、或者长度超过URL长度限制,可以直接调整为POST请求,把参数放到请求体中传递,完全规避URL特殊字符问题:

  • 前端侧:调整为POST请求,把参数放到JSON请求体中发送
  • 后端侧:调整请求方法为POST,用@RequestBody接收参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:48:04