在 httpservletrequest 中获取路径参数的任何方式

Posted

技术标签:

【中文标题】在 httpservletrequest 中获取路径参数的任何方式【英文标题】:Any way to get the path parameters in httpservlet request 【发布时间】:2014-04-07 15:12:21 【问题描述】:

我已经实施了休息服务。

我正在尝试在过滤器中获取请求的路径参数。

我的要求是

/api/test/id1/status

 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
        throws IOException, ServletException
    
         //Way to get the path parameters id1 and status


     

【问题讨论】:

【参考方案1】:

除了尝试自己解析 URI 之外,没有其他方法可以在 ServletFilter 中执行此操作,但如果您决定使用 JAX-RS 请求过滤器,则可以访问路径参数:

@Provider
public class PathParamterFilter implements ContainerRequestFilter 

    @Override
     public void filter(ContainerRequestContext request) throws IOException 
        MultivaluedMap<String, String> pathParameters = request.getUriInfo().getPathParameters();
        pathParameters.get("status");
        ....
    

【讨论】:

【参考方案2】:

您可以在过滤器中自动装配 HttpServletRequest 并使用它来获取信息。

@Autowire
HttpServletRequest httpRequest


httpRequest.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE)  

will give you map of path params.

例子:

如果您的请求类似于 url/requestId 那么上面的地图将返回

0 = LinkedHashMap$Entry@12596 "requestId" -> "a5185067-612a-422e-bac6-1f3d3fd20809"
 key = "requestId"
 value = "a5185067-612a-422e-bac6-1f3d3fd20809"

【讨论】:

但请注意,这需要运行一些过滤器才能使用! 有什么例子吗?【参考方案3】:
String pathInfo = request.getPathInfo();
    if (pathInfo != null) 
        String[] parts = pathInfo.split("/");
        int indexOfName = Arrays.asList(parts).indexOf("test");
        if (indexOfName != -1) 
            Optional<String> testId1 = Optional.of(parts[indexOfName + 1]);
            Optional<String> status= Optional.of(parts[indexOfName + 2]);
        

    

你的 Servlet 映射应该是到 /api/* 例如。 @WebServlet(urlPatterns = "/api/*")

【讨论】:

以上是关于在 httpservletrequest 中获取路径参数的任何方式的主要内容,如果未能解决你的问题,请参考以下文章

HttpServletRequest - 如何获取引用 URL?

如何在一个类中获取HttpServletRequest 对象

如何在 @service 类中获取 HttpServletRequest 对象

如何在我的 spring bean 中获取 HttpServletRequest?

在 Jax Rs / Appfuse 应用程序中获取 HttpServletRequest?

HttpServletRequest - 获取查询字符串参数,无表单数据