|
|
|
Странное поведение Spring MVC при парсинге параметров
|
|||
|---|---|---|---|
|
#18+
Допустим, есть форма, содержащая строку ввода (или скрытое поле - неважно), предназначенную для ввода числового значения, в дальнейшем Long: Код: html 1. и контроллер с методом, обрабатывающим запрос отправки формы с указанным параметром: Код: java 1. 2. 3. 4. Если в поле ввода ничего не вводить, то получим исключение: автор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 параметра, сводя на нет удобство использования указания параметров метода. Ну, или анализ на клиенте, совершенно не подходящий для надежного приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2013, 17:15:04 |
|
||
|
Странное поведение Spring MVC при парсинге параметров
|
|||
|---|---|---|---|
|
#18+
Причем, включение 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 рулят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2013, 18:41:01 |
|
||
|
Странное поведение Spring MVC при парсинге параметров
|
|||
|---|---|---|---|
|
#18+
забыл ник... можно замапить ExceptionHandler на TypeMismatchException и обрабатывать как душе угодно ... Как и где? Я не использую модель формы и валидаторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2013, 18:56:15 |
|
||
|
Странное поведение Spring MVC при парсинге параметров
|
|||
|---|---|---|---|
|
#18+
Вот эти ссылки могут навести вас на мысль http://pietrowski.info/2010/06/spring-mvc-exception-handler/ http://doanduyhai.wordpress.com/2012/05/06/spring-mvc-part-v-exception-handling/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2013, 19:06:39 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=227&tid=2129286]: |
0ms |
get settings: |
15ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
40ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 306ms |
| total: | 477ms |

| 0 / 0 |
