问题
发起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获取到请求中的表单参数。

本文介绍了解决在SpringCloud Zuul过滤器中无法获取multipart/form-data类型请求的参数问题,通过使用HttpServletRequestWrapper.getRequest()方法成功获取到token参数。
1673

被折叠的 条评论
为什么被折叠?



