首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅在Ajax请求中在大型JSON字符串上获取MissingServletRequestParameterException:必需的字符串参数“..”不存在

仅在Ajax请求中在大型JSON字符串上获取MissingServletRequestParameterException:必需的字符串参数“..”不存在
EN

Stack Overflow用户
提问于 2019-10-21 16:20:06
回答 2查看 490关注 0票数 0

下面的代码90%的时间工作在正常长度的JSON字符串上。我在我的SpringMVC控制器中接收到一个传入的JSON字符串,它是由一个DataTable .data()形成的。

Ajax:

代码语言:javascript
运行
复制
function exportParticipants() {
    var table = $('#participantsTable').DataTable();
    var displayData = table.rows({filter:'applied'}).data(); // Get my data into "result" array
    var result = $.makeArray();
    $.each(displayData,function(index,row) {
        result.push(row);
    });
    $.ajax({
        url: "/app/loadParticipantsExportValues",
        type: "post",
        data: {
            'participants': JSON.stringify(result)  // Note that I form this 'participants' param
        },
        success: function (res){
            console.log("success");
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log("error");
        }

主计长:

代码语言:javascript
运行
复制
@RequestMapping(value="/loadParticipantsExportValues", method=RequestMethod.POST)
public void loadParticipantsExportValues(@RequestParam("participants") String json) throws Exception {
   //...
}

但是,在非常大的JSON字符串上(由10K行DataTable形成),即使我在调试器中验证是否创建了数组,我还是得到了如下结果:

代码语言:javascript
运行
复制
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'participants' is not present
    at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:204)
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:112)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)

有什么想法吗?什么东西是被截断了还是最大限度地消失了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-21 21:46:52

我解决了。这是Tomcat maxPostSize问题,默认值是2MB。

修复它的例子,server.xml in Tomcat

代码语言:javascript
运行
复制
<Connector port="8009" maxPostSize="4000000" protocol="AJP/1.3" redirectPort="8443"/>

或者,无限的:

代码语言:javascript
运行
复制
<Connector port="8009" maxPostSize="-1" protocol="AJP/1.3" redirectPort="8443"/>

另见:https://stackoverflow.com/a/42490643/1005607

票数 1
EN

Stack Overflow用户

发布于 2019-10-21 16:50:56

许多客户端截断大请求参数-> limit on query String

请使用@RequestBody,如

代码语言:javascript
运行
复制
@RequestMapping(value="/loadParticipantsExportValues", method=RequestMethod.POST)
public void loadParticipantsExportValues(@RequestBody String participants) throws Exception{

    //....
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58490346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档