SpringCloudZuul过滤器无法获取multipart/form-data参数getParameter为空

发起multipart/form-data类型的请求

通过在ZuulFilter过滤器的run()方法中使用下面方法:

RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String token = request.getParameter("token");
发现无法获取到token,token为空。


解决方案:

通过下面代码就可以获取到multipart/form-data类型的参数。

HttpServletRequestWrapper httpServletRequestWrapper = (HttpServletRequestWrapper) request;
token = httpServletRequestWrapper.getRequest().getParameter("token");

解决过程:

通在继续DEBUG我发现context.getRequest()获取到的是Servlet30RequestWrapper
直接通过该包装类,无法获取到multipart/form-data类型的参数。
Servlet30RequestWrapper 继承自HttpServletRequestWrapper
HttpServletRequestWrapper中有个一个方法

public HttpServletRequest getRequest(){...}
通过该方法可以获取一个HttpServletRequest,这个HttpServletRequest实际上也就是StandardMultipartHttpServletRequest。
于是便可以通过StandardMultipartHttpServletRequest获取到请求中的表单参数。


评论 (0)