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

Java Servlet多路径占位符API配置:双参数时404报错解决

解决Servlet双路径占位符404错误及参数解析问题

问题根源

你的代码存在两个核心问题,直接导致404错误和参数解析失败:

  1. Servlet路径映射不规范:@WebServlet("/organization/*/location/*")不符合Servlet路径匹配规则,*只能作为路径的最后一部分使用(比如/organization/*),夹在路径中间的*无法正确匹配请求,直接引发404。
  2. 路径参数索引取值错误:以请求/organization/5/location/50为例,getPathInfo()返回/5/location/50,按/分割后得到数组["", "5", "location", "50"],原代码取pathInfo[2]和pathInfo[4],前者是字符串location而非组织ID,后者会直接触发数组越界。

修改后的代码

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/organization/*")
public class LocationServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String pathInfo = request.getPathInfo();
        // 处理空路径情况
        if (pathInfo == null || pathInfo.isEmpty()) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            response.getWriter().write("Invalid URL");
            return;
        }
        
        String[] pathSegments = pathInfo.split("/");
        // 校验路径格式:必须是 /{orgId}/location/{locId},分割后数组长度为4
        if (pathSegments.length == 4 && "location".equals(pathSegments[2])) {
            String organizationId = pathSegments[1];
            String locationId = pathSegments[3];
            
            // 这里编写业务逻辑,比如根据ID查询数据
            response.getWriter().write("Organization ID: " + organizationId + ", Location ID: " + locationId);
        } else {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            response.getWriter().write("Invalid URL");
        }
    }
}

修改说明

  1. 修正路径映射:将Servlet映射改为/organization/*,确保所有以/organization/开头的请求都能匹配到当前Servlet。
  2. 调整参数解析逻辑:
    • 增加空路径判断,避免空指针异常。
    • 通过数组长度和pathSegments[2]的值校验路径格式,确保请求符合/organization/{orgId}/location/{locId}的结构。
    • 正确取值:pathSegments[1]为组织ID,pathSegments[3]为地点ID,彻底解决参数错误和数组越界问题。
  3. 强化合法性校验:仅处理符合规范的路径请求,其他格式直接返回400错误,提升接口鲁棒性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:05:03