前后端分离。前端POST请求参数过长,导致400错误解决办法及分析


在servlet规范3.1.1节里,对POST数据何时会被当做parameters有描述:

1. The request is an HTTP or HTTPS request.
2. The HTTP method is POST.
3. The content type is application/x-www-form-urlencoded.
4. The servlet has made an initial call of any of the getParameter family of methods on the request object.
 
If the conditions are met, post form data will no longer be available for reading directly from the request object’s input stream.

规范里已经明确的声明当请求满足: 1) http/https, 2) POST, 3) Content-type 是application/x-www-form-urlencoded, 4) 调用过getParameter方法;则数据会被当做请求的paramaters,而不能再通过 request 的 inputstream 直接读取。

将前端提交方式 Content-type修改为了application/json 这种JSON格式,不会限制传过来的大小。同时后台接收也就需要修改。代码修改为:

...
@PutMapping(value = "save", produces = "application/json")
public ResponseResult save(@ApiParam("参数对象") @RequestBody @Valid PriceControlFromVO vo) {
...

直接使用对象接收,不需要再进行JSON转换。这样问题就解决了。

声明:Wayen|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 前后端分离。前端POST请求参数过长,导致400错误解决办法及分析


-当你感到最无助困难的时候,那就是离成功最近的时候。-Martin Frohm