问题
发起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");
如果上述方式无法解决你的问题,你可以尝试这个
itdragons . 解决Spring Cloud Zuul过滤器获取请求参数为空 . https://blog.csdn.net/itdragons/article/details/81482050
itdragons 的方式多加入了一个OncePerRequestFilter
类型的过滤器,来设置参数,然后通过RequestContext
来获取参数。
解决过程
通在继续DEBUG我发现context.getRequest()
获取到的是Servlet30RequestWrapper
直接通过该包装类,无法获取到multipart/form-data
类型的参数。
Servlet30RequestWrapper
继承自HttpServletRequestWrapper
HttpServletRequestWrapper
中有个一个方法
public HttpServletRequest getRequest(){...}
通过该方法可以获取一个HttpServletRequest
,这个HttpServletRequest
实际上也就是StandardMultipartHttpServletRequest
。
于是便可以通过StandardMultipartHttpServletRequest
获取到请求中的表单参数。