Grails: настройка приоритетов сопоставления URL-адресов

Я иногда сталкиваюсь с ситуацией, когда я пытаюсь установить URLMappings как таковой:

/** -> ContentController
 /static/$image/$imageNumber -> ResourcesController

Затем, когда я навещаю /static/image/13, он часто попадает в /** вместо

/static/*/*
. Как я могу сказать Spring/Grails скорее попробовать и сопоставить другой первый?
2 ответа

Оказывается, что Grails перейдет от более специфичного к наименее конкретному, если:

  • У вас нет синтаксических ошибок в URLMappings и
  • Иногда вам нужно перезапустить grails, чтобы он мог вступить в силу.

    "/other-test/$testname" { // Fired for "/other-test/hi-there/"
     controller="test"
    }
    "/**" { // fired for "/something-else"
     controller="test"
    }


Отображения URL-адресов попадают в том порядке, в котором они объявлены, поэтому добавьте ваш трек /** last.

РЕДАКТИРОВАТЬ: Этот ответ щекотал мой взгляд, и я снова вспомнил что-то, что я прочитал в списке рассылки. Назад в Grails 1.1 или около того, URLMappings были оценены в объявленном порядке. Однако теперь сопоставление URLMapping немного сложнее. URLMappings попытается вернуть наилучшее соответствие, сравнив количество подстановочных знаков, статических токенов и, наконец, число ограничений. Вы можете увидеть это в источнике.

Поскольку порядок сопоставления URL-адресов больше не имеет значения, он должен быть чем-то другим (хотя я считаю, что их перечисление в грубом порядке облегчает их чтение). Похоже, что второй фрагмент должен быть статическим маркером. Я бы попробовал /static/image/$imageNumber.

licensed under cc by-sa 3.0 with attribution.