Patan
Patan

Reputation: 17873

Any way to get the path parameters in httpservlet request

I have rest service implemented.

I am trying to get the path parameters of the the request in filter.

My request is

/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


     }

Upvotes: 15

Views: 43506

Answers (3)

Saurabh Talreja
Saurabh Talreja

Reputation: 349

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]);
        }

    }

Your Servlet Mapping should be till /api/* eg. @WebServlet(urlPatterns = {"/api/*"})

Upvotes: 2

Vivek Garg
Vivek Garg

Reputation: 2335

You can autowire HttpServletRequest in your filter and use it to get information.

@Autowire
HttpServletRequest httpRequest


httpRequest.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE)  

will give you map of path params.

Example:

If your request is like url/{requestId} then above map will return

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

Upvotes: 32

jkovacs
jkovacs

Reputation: 3530

There's no other way to do it in a ServletFilter other than trying to parse the URI yourself, but you can access the path parameters if you decide to use a JAX-RS request filter:

@Provider
public class PathParamterFilter implements ContainerRequestFilter {

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

Upvotes: 7

Related Questions