gpt4 book ai didi

java - Spring Boot POST 参数大小限制

转载 作者:行者123 更新时间:2023-12-02 01:14:30 24 4
gpt4 key购买 nike

我似乎在某个地方与限制器发生冲突。我的 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 = "Save one survey results")
public Resource<SurveyResult> createSurveyResults(

@ApiParam(value = "who/what process created this record", required = true) @Valid
@RequestParam(value = "recordCreatedBy", required = true) String createdBy,

@ApiParam(value = "was an issue identified", required = true)
@RequestParam(value = "hadFailure", required = true) Boolean hadFailure,

@ApiParam(value = "JSON representation of the results", required = true)
@RequestParam(value = "surveyResults", required = true) String surveyResult

) ...

如果我在此发布大约 1500 个字符,就可以了。超过这个值就会失败,并出现 HTTP 400 错误 bad request 。加上其他参数,整个payload不到2K。

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

最佳答案

请使用@RequestBody而不是@RequestParam

@RequestBody 注释将 HTTP 请求的正文映射到对象。 @RequestParam 映射请求中的请求参数,该参数位于 URL 中,而不是正文中。

大多数浏览器对请求参数中支持的字符数有限制,而您正好达到了该限制。

我建议创建一个如下所示的 POJO

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

// getters and setters
}

现在你的 Controller 会更简单

@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"}

关于java - Spring Boot POST 参数大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com