我已实施休息服务。
我正在尝试在过滤器中获取请求的路径参数。
我的要求是
/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
}
答案 0 :(得分:6)
您可以在过滤器中自动装配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"
答案 1 :(得分:5)
除了尝试自己解析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 :(得分:-1)
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/*"})