0
点赞
收藏
分享

微信扫一扫

springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题...


  前段时间处理上传文件时遇到了一些问题 multipart/form-data 方式提交的请求 在无法用 Filter中用 ServletRequest.getParameter 方

  法取不到一并提交上来的 参数,

  网上说 需要使用 ServletRequest.getReader() 方法 来获取请求信息(RequestPayload), 然后在解析字符串来获取想要的参数。

  但是! ServletRequest.getReader() 只能获取一次,如果在拦截其中 取出了requestPayload ,那么在spring的 controller 中 你将取不到参数和文件了!!!!!

  寻找方案:通过查看mvc的源码 果然 发现了两个类,

  实现了、 ServletRequest的 org.springframework.web.multipart.MultipartHttpServletRequest.java 类 (这个类的 getParameter 方法可以获取到 multipart/form-data 和 非multipart/form-data 方法上传的 参数)

  用于创建 MultipartHttpServletRequest.java 的 org.springframework.web.multipart.MultipartResolver.java 类

  使用方法

  首先在你的spring配置文件中 配置 MultipartHttpServletRequest

  在你的拦截其中 注入 MultipartHttpServletRequest

  在你的最顶层的 拦截器中 把你的 ServletRequest 替换成 MultipartHttpServletRequest

  把 用上面 2.3的 getRequest(req) 获取到的 MultipartHttpServletRequest 交给 chain.doFilter(MultipartHttpServletRequest, resp); 让请求继续执行(这时使用获取到的 MultipartHttpServletRequest.getParameter 方法就能正常获取参数了)。 之后的所有拦截器和controller也都能继续get参数了

举报

相关推荐

0 条评论