Ответ 1
Сделать приведенное ниже изменение классом класса контроллера для параметра страницы @RequestParam (defaultValue = 0) int.
Или вставьте здесь метод контроллера.
У меня проблема, которая возникает в конечном итоге на моем веб-сайте. Он использует AJAX запросы для получения данных с сервера, который использует Spring MVC.
Что происходит (с перерывами) в том, что иногда мы получаем исключение, подобное этому:
org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'page' is not present
at
Такое исключение возникает в некоторых вызовах AJAX POST (не только для этого случая!!), и мы по-прежнему не можем воспроизвести его, чтобы понять, что происходит.
Например, в одном из случаев параметр "страница" (используемый для загрузки контента, когда пользователь прокручивает страницу - так что это требуемая переменная) отправляется с помощью вызова AJAX, который имеет поле 'data' с параметром страницы, поступающим из такой формы:
<input type="hidden" name="page" id="page" value="1">
И такой как ajax-вызов (как $( "# filter" ), так и url):
$.ajax({
type: "POST",
data: $("#filter").serialize(), // serializes the form elements.
url: _ctx + URL_FILTER,
cache: false
})
Единственный способ, которым мы должны воспроизвести это, - изменить его свойство "имя" на нечто иное, чем "страница". Но я думаю, что это не так (большинство пользователей даже не открывают консоль разработчика...)
Я много гугнул, и я проверял все возможности. Подтверждение в порядке:
(Content-Type: application/x-www-form-urlencoded; charset=UTF-8)
Параметры в порядке, AJAX выглядит нормально, все выглядит нормально... Но мы не можем найти, что происходит. Мы пробовали много возможностей, но мы все равно не могли заставить эти исключения произойти.
Одна из гипотез заключается в том, что иногда AJAX может отправлять пустые блоки данных без каких-либо параметров. Но мы даже не знаем, правда это или нет, и как проверить его достоверность.
Каковы возможности? Как это можно проверить?
EDIT: Мы могли бы воспроизвести один из способов получить исключение: перезагрузка страницы несколько раз в течение нескольких секунд (удерживая клавишу перезагрузки нажатой некоторое время). Есть ли способ предотвратить исключение для этого случая?!
Сделать приведенное ниже изменение классом класса контроллера для параметра страницы @RequestParam (defaultValue = 0) int.
Или вставьте здесь метод контроллера.
Если вы не смогли выяснить, что является причиной отсутствия параметра, поэтому вы можете добавить
public void controllerMethodName (@RequestParam(required = false) int page)
в определении вашего контроллера, который не будет вызывать никаких исключений, если параметр отсутствует в вашем запросе ajax.
Вы уверены, что ваша форма не изменяется одновременно? Например, если ваша библиотека, используемая для обработки прокрутки страницы, пытается отправить ту же форму за очень короткое время (первый вызов обновляет форму, а второй вызов сериализует ее). Это может быть только в некоторых браузерах, а не во всех из них, учитывая, что вы не можете легко воспроизвести его.
Способ передачи данных обратно в форму также может отвечать за вашу проблему.
Регистрация HTTP-запросов/использование аналитики поможет вам определить, какие запросы/пользовательские агенты вызывают проблемы.