12

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


     }
Patan
  • 17,073
  • 36
  • 124
  • 198

3 Answers3

27

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"
Vivek Garg
  • 2,115
  • 1
  • 20
  • 17
6

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");
        ....
    }
}
jkovacs
  • 3,470
  • 1
  • 23
  • 24
2
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/*"})

Saurabh Talreja
  • 335
  • 2
  • 6