您可以检查使用ContainerRequestFilter并将传递的参数与定义的参数进行比较:
@Providerpublic class RequestParamFilter implements ContainerRequestFilter { @Context private ResourceInfo resourceInfo; @Context private HttpServletRequest servletRequest; @Override public void filter(ContainerRequestContext requestContext) throws IOException { Set<String> validParams = new HashSet<String>(); Method method = resourceInfo.getResourceMethod(); for (Annotation[] annos : method.getParameterAnnotations()) { for (Annotation anno : annos) { if (anno instanceof QueryParam) { validParams.add(((QueryParam) anno).value()); } } } for (String param : servletRequest.getParameterMap().keySet()) { if (!validParams.contains(param)) { requestContext.abortWith(Response.status(Status.BAD_REQUEST).build()); } } }}
不要忘记ServletRequest#getParameterMap返回一个Map,该Map包含查询字符串参数和在请求正文中传递的参数。因此,也许您需要自己解析查询字符串。
注意:这不会加快您的应用程序的速度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)