我发现的解决方案:
仅重新定义参数访问方法是不够的。必须完成几件事。
- 需要一个将请求包装的过滤器。
- 需要自定义 HttpRequestWrapper ,所有参数访问方法都将被覆盖。请求主体应在构造函数中解析,并存储为字段。
- getInputStream 和 getReader 方法也应重新定义。它们的返回值取决于存储的请求正文。
- 自定义类扩展 ServletInputStream 是必需的,因为该类是抽象的。
这4个组合将使您可以使用 getParameter 而不干扰 getInputStream 和 getReader 方法。
请注意,手动请求参数解析可能会因多部分请求而变得复杂。但这是另一个话题。
为了澄清起见,我重新定义了参数访问方法,因为我的请求已如问题中所述损坏。您可能不需要。



