powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Странное поведение Spring MVC при парсинге параметров
5 сообщений из 5, страница 1 из 1
Странное поведение Spring MVC при парсинге параметров
    #38273218
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, есть форма, содержащая строку ввода (или скрытое поле - неважно), предназначенную для ввода числового значения, в дальнейшем Long:
Код: html
1.
<input type="text" value="" name="entityid"/>

и контроллер с методом, обрабатывающим запрос отправки формы с указанным параметром:
Код: java
1.
2.
3.
4.
@RequestMapping(value = "/somepath", method = RequestMethod.POST)
public String test(@RequestParam(value = "entityid") Long entityId) {
    ...
}

Если в поле ввода ничего не вводить, то получим исключение:
авторorg.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'entityid' is not presentПричем, включение request = false в @RequestParam ничего не даст. Но с пустой строкой можно бороться, добавив дефолтное значение в @RequestParam: defaultValue = "0", которое потом обработать.
Однако если в строку ввода все же ввести не число (например, "null"), то получим исключение
авторorg.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "null"
То есть получается, что если делать достаточно надежную систему "от дурака", то использовать "@RequestParam Long param" нельзя, надо в любом случае получать String и уже вручную парсить в try .. catch, добавляя 5-8 строк "лишнего" кода в метод. Отсутствует логика - если параметр не может привестись к нужному типу, он по идее должен вернуть null как значение параметра. Возможно, это кому-то нужно - знать, что произошло исключение при парсинге. В этом случае есть ли механизм обработки/ловли исключения при подобном случае? Получается, что подобная проблема будет фактически для любого не-String параметра, сводя на нет удобство использования указания параметров метода. Ну, или анализ на клиенте, совершенно не подходящий для надежного приложения.
...
Рейтинг: 0 / 0
Странное поведение Spring MVC при парсинге параметров
    #38273245
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем, включение request = false в @RequestParam ничего не даст. Но с пустой строкой можно бороться, добавив дефолтное значение в @RequestParam: defaultValue = "0", которое потом обработать.
Однако если в строку ввода все же ввести не число (например, "null"), то получим исключение
авторorg.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "null"
То есть получается, что если делать достаточно надежную систему "от дурака", то использовать "@RequestParam Long param" нельзя, надо в любом случае получать String и уже вручную парсить в try .. catch, добавляя 5-8 строк "лишнего" кода в метод. Отсутствует логика - если параметр не может привестись к нужному типу, он по идее должен вернуть null как значение параметра. Возможно, это кому-то нужно - знать, что произошло исключение при парсинге. В этом случае есть ли механизм обработки/ловли исключения при подобном случае? Получается, что подобная проблема будет фактически для любого не-String параметра, сводя на нет удобство использования указания параметров метода. Ну, или анализ на клиенте, совершенно не подходящий для надежного приложения.[/quot]

Не совсем понятно, что вас так обескуражило. Во-первых можно замапить ExceptionHandler на TypeMismatchException и обрабатывать как душе угодно. Ну а -вторых, в большинстве случаев у меня одной форме соотвествует один валидатор, и никаких реквайред параметров, просто вызов validator.validate() вначале, а он уж сам разберется кто и в чем не прав) ну а на странице form:errors рулят
...
Рейтинг: 0 / 0
Странное поведение Spring MVC при парсинге параметров
    #38273259
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник... можно замапить ExceptionHandler на TypeMismatchException и обрабатывать как душе угодно ...
Как и где?

Я не использую модель формы и валидаторы.
...
Рейтинг: 0 / 0
Странное поведение Spring MVC при парсинге параметров
    #38273262
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Странное поведение Spring MVC при парсинге параметров
    #38273306
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо, буду знать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Странное поведение Spring MVC при парсинге параметров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]