На больших строках JSON только в Ajax-запросе отсутствует MissingServletRequestParameterException: Обязательный параметр String '..' отсутствует - PullRequest
0 голосов
/ 21 октября 2019

Следующий код работает в 90% случаев со строками JSON нормальной длины. Я получаю входящую строку JSON в моем контроллере SpringMVC, сформированную из таблицы данных .data().

Ajax:

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");
        }

Контроллер:

@RequestMapping(value="/loadParticipantsExportValues", method=RequestMethod.POST)
public void loadParticipantsExportValues(@RequestParam("participants") String json) throws Exception {
   //...
}

Но на оченьтолько большие строки JSON (сформированные из таблицы данных из 10K строк), хотя я проверяю в отладчике, что массив создается, я получаю следующее:

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)

Есть идеи? Что-то усечено или исчерпано?

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Многие клиенты усекают большой параметр запроса -> ограничение на запрос Строка

Пожалуйста, используйте @RequestBody как в

@RequestMapping(value="/loadParticipantsExportValues", method=RequestMethod.POST)
public void loadParticipantsExportValues(@RequestBody String participants) throws Exception{

    //....
}
0 голосов
/ 22 октября 2019

Я решил это. Это была проблема Tomcat maxPostSize, значение по умолчанию - 2 МБ.

Пример того, как это исправить, server.xml в Tomcat :

<Connector port="8009" maxPostSize="4000000" protocol="AJP/1.3" redirectPort="8443"/>

или,неограниченно:

<Connector port="8009" maxPostSize="-1" protocol="AJP/1.3" redirectPort="8443"/>

Смотри также: https://stackoverflow.com/a/42490643/1005607

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...