Reputation: 17873
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
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
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
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