Spring Boot POST参数大小限制

我似乎遇到了某个限制。我的Spring-Boot REST端点(POST)参数(surveyResults)正在寻找一个JSON字符串:


    private static final String SURVEY_RESULTS_ENDPOINT = "/survey/results";

    @PostMapping(
        value = SURVEY_RESULTS_ENDPOINT,
        produces = { "application/hal+json", "application/json" }
    )
    @ApiOperation(value = "保存一个调查结果")
    public Resource<SurveyResult> createSurveyResults(

            @ApiParam(value = "谁/什么进程创建了这个记录", required = true) @Valid
                @RequestParam(value = "recordCreatedBy", required = true) String createdBy,

            @ApiParam(value = "是否有问题被发现了", required = true)
                @RequestParam(value = "hadFailure", required = true) Boolean hadFailure,

            @ApiParam(value = "结果的JSON表示", required = true)
                @RequestParam(value = "surveyResults", required = true) String surveyResult

    ) ...

如果我用大约1500个字符发帖,它就可以工作。只是超过那个限制,它就会出现HTTP 400错误坏请求。整个有效负载小于2K,其他参数也是如此。

我刚从Wildfly转移到了一个新的服务器设置。我的公司正在采用对云服务器的持续部署,所以我对这个新的负载平衡服务器没有太多控制和可见性。服务器是“server”:“openresty/1.13.6.2” - 有什么想法我遇到了什么限制吗?

点赞
用户2042457
用户2042457

请使用@RequestBody代替@RequestParam

@RequestBody注解将HTTP请求的主体映射到一个对象上。@RequestParam将请求参数映射到请求中,该请求参数在URL中而非主体中。

大多数浏览器在请求参数中支持的字符数有限,而您刚刚遇到了这个限制。

我建议创建一个类似于以下类的POJO

public class Body {
   private String createdBy;
   private Boolean hadFailure;
   private String surveyResult;

// 获取器和设置器
}

现在你的控制器将更简单

@PostMapping(
        value = SURVEY_RESULTS_ENDPOINT,
        produces = { "application/hal+json", "application/json" }
    )
public Resource<SurveyResult> createSurveyResults(@RequestBody Body body) {

}

无论您在何处发帖,现在都必须发布一个JSON(Content-Type = application/json),其外观如下

{ "createdBy" : "foo", "hadFailure" : false, "surveyResult" : "the foo bar"}
2019-11-16 01:17:19