缺少请求正文的 Spring Boot POST 请求?

Bằn*_*aru 5 java spring spring-mvc spring-boot

我有一个非常简单的 HTML 表单页面(它是 src/main/resources/public/web.html 中 Spring Boot Web 应用程序的一部分)将字符串从 textarea 发布到 Spring Boot Web 应用程序版本 1.5.2。

<form action="" method="post">
<textarea cols="128" rows="40" name="query"></textarea>
<input value="Send" type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

以及用于处理 POST 请求的 SpringBoot 类:

@RestController
public class QueryController {
    @RequestMapping(value = "/handle", method = RequestMethod.POST)
    protected void handlePost(@RequestBody String postBody) throws Exception {
       // Get query from postBody here
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于来自客户端 textarea 的小字符串。但是,当字符串很大时(例如:带有 HTTP 请求标头:Content-Length:3789333 (3 MB))。Spring Boot 抛出这样的异常:

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: protected void QueryController.handlePost(java.lang.String) throws java.lang.Exception
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:154)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:128)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
Run Code Online (Sandbox Code Playgroud)

我不确定是什么导致了这个问题,我正在使用 Spring Boot 中的嵌入式 Tomcat 运行 Web 应用程序。

小智 1

我不确定,但这可能是由于缺少内容编码造成的吗?