我有一个应用程序,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...
&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
)
这可能是什么原因造成的?大多数照片都可以,但大约 10% 会出现此错误。对于抛出它的照片来说它是可再现的。
这是 Spring 的一个错误吗?
此错误与整个网址长度相关吗
据我所知,Http url 的大小是有限的 您可以尝试通过带有多部分数据标头的请求正文发送图像,或搜索将参数拆分为块的方法
希望这会有所帮助