尽管参数位于 POST 中,Spring MissingServletRequestParameterException 错误

Mar*_*ark 8 java spring spring-mvc

我有一个应用程序,Spring 偶尔会抛出错误: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'action' is not present

当然,您会期望action参数丢失,但它肯定是由浏览器发布的。我什至用 Wireshark 观察网络流量,它就在那里!

以下是从 Chrome 开发工具中获取的原始帖子示例 - 请注意&action=accept

 imageId=1445&customReason=&action=accept&image=iVBORw0K...
Run Code Online (Sandbox Code Playgroud)

&image是一个 base64 编码的图像(取自 canvas 元素),整个 POST 大约为 4Mb。

它在 Tomcat 6.0 和 Spring 3.2.8 中运行。

引发此问题的 Spring MVC 控制器是:

public String saveApprove(
      HttpServletRequest request,
      Model model,
      @RequestParam(value="action", required=true) String action,
      @RequestParam("imageId") int imageId,
      @RequestParam(value="image", required=false) String imageBase64Encoded,
      @RequestParam(value="rejectReasons", required=false) String rejectReasons[],
      @RequestParam(value="customReason", required=false) String customReason

  )
Run Code Online (Sandbox Code Playgroud)

可能是什么原因造成的?大多数照片都可以,但大约 10% 会出现此错误。对于抛出它的照片来说,它是可复制的。

这是 Spring 的一个错误吗?

小智 5

此错误是否与整个 url 长度相关

据我所知,Http url 的大小是有限的您可以尝试通过带有多部分数据标头的请求正文发送图像,或者搜索将参数拆分为块的方法

希望这会有所帮助