java - 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 = "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 个字符发布到这里,它就可以工作。就在某个地方,它会因 HTTP400
错误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
}
现在你的控制器会更简单
@PostMapping(
value = SURVEY_RESULTS_ENDPOINT,
produces = { "application/hal+json", "application/json" }
)
public Resource<SurveyResult> createSurveyResults(@RequestBody Body body) {
}
无论您在哪里发布,您现在都必须发布一个Content-Type = application/json
如下所示的 JSON ( )
{ "createdBy" : "foo", "hadFailure" : false, "surveyResult" : "the foo bar"}
推荐阅读
- azure - 用于在 WebApp 中列入白名单的 Azure 前门探测 ip
- php - Laravel:模型(GlobalScope)上的 boot() 方法中的 request->user()
- android - 在 PageKeyedDataSource 中设置 DataSource 大小以获得占位符效果
- amazon-dynamodb - DynamoDB,如何从 begin_with() 中获取 negetion,例如 !begin_with()
- c++ - 如何在没有循环的数字的二进制表示中仅计算 1 位
- java - Spring Security 在控制器上返回 String 作为主体而不是 UserDetails
- php - 锄头在php中获取出生日期或日期出生表格字符串
- javascript - 除非您第二次重新加载站点,否则 ReactJS 组件不会加载
- sql - 如何根据某些条件在postgres中逐列获取最后一行
- ios - 如何将 anchorPoint of view 设置为 0.5 、 0.5 以获得屏幕中心的视图?(不是场景)