Spring MVC – @PathVariable игнорирует символы после точки

spring boot sequrity

содержание

Проблема

Столкнулся с неожиданной проблемой во время запроса файла на выгрузку обрезалось расширение файлов fileName.XLS или fileName.XLSX в результате в контроллер прилетало только fileName.

 

рассмотрим следующие варианты :

Если ввести /files/leodev, «fileName» выведет leodev
Если ввести /files/leodev.ru, «fileName» выведет leodev, последняя точка(.) отсекается!?!?
Если ввести /files/leodev.ru.com, «fileName» выведет leodev.ru, последняя точка(.) отсекается!
Если ввести /files/leodev.ru.com.abc, «fileName» выведет leodev.ru.com
Если ввести /files/blog.leodev.ru, «fileName» выведет blog.leodev
Как видим последняя точка (.) всегда будет отсекаться

Решение

Что бы исправить это нужно добавить регулярное выражение к маппингу /files/{file_name:.+} в @RequestMapping

Согласно документации по умолчанию шаблон URI будет соответствовать регулярному выражению [^ \.] * (Т.е. любой символ, отличный от периода), но это можно изменить, указав другое регулярное выражение.

Немного о Regular expression

Используя подсказки ниже разберем наше выражение:

. (точка) — говорит о том что после нашего file_name будет один любой символ

+(плюс) — после точки говорит что символ будет один или больше

========== МЕТАСИМВОЛЫ ============
^ (циркумфлекс) — начало проверяемой строки
$ (доллар) — конец проверяемой строки
. (точка) — любой символ
| — ИЛИ
? — предшествующий вопросу символ не обязательный
+ — любое колличество символов
* — любое кол-во экземпляров элемента(в том числе нулевое)
\\d — цифровой сивол
\\D — НЕ цифровой сивол
\\s — пробельный символ
\\S — НЕ пробельный символ
\\w — буквенный или цифровой символ или знак подчеркивания
\\W — любой символ кроме буквенного или цифрового или знака подчеркивания

========== КВАНТИФИКАТОРЫ ============

+(плюс/знак конкатенации) — один или более символ

Ссылки

Подробнее про Regular expression

Spring WebMVC

Подписаться
Уведомлять о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
старым
новым колличеству голосов
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Leo Dev Blog | LD
Обзор конфиденциальности

На сайте используются обязательные и аналитические файлы cookie.

Обязательные cookie необходимы для корректной работы сайта.

Аналитические cookie используются для анализа посещаемости и улучшения работы сайта.

Вы можете изменить настройки использования cookie.