2013-11-25 1 views
1

После обновления приложения grails с версии 2.2.2 до 2.3.2 и в конечном итоге 2.3.3 я заметил, что некоторые ссылки, которые ранее работали, теперь возвращает статус 404.Grails 2.3.2/.3 Обновление - невозможно сопоставить URL-адреса, заканчивающиеся на .html

Для иллюстрации, вот образец ссылки и соответствующая запись отображения URL, который был первоначально работал в v2.2.2:

http://localhost:7080/pages/mytestpage 
http://localhost:7080/pages/mytestpage.html 

UrlMappings.groovy

static mappings = { 
    "pages/mytestpage"(controller: 'testController', action: 'testAction') 
} 

После обновления , среди приведенных ссылок ссылка ниже не работает больше (т.е. ссылка с .html):

http://localhost:7080/pages/mytestpage.html 

Один из способов решить эту проблему, изменив запись URLMappings как показано ниже:

UrlMappings.groovy (Modified)

static mappings = { 
    "pages/mytestpage(.$format)?"(controller: 'testController', action: 'testAction') 
} 

Мой вопрос, есть ли способ для решения этой проблемы без необходимости обновления записи URLMappings? Любой, кто может объяснить, как такое отображение фактически работает в версии 2.2.2, также будет большой помощью. Благодаря!

ОБНОВЛЕНИЕ

Используя (.html)? вместо (. $ Format)? в UrlMappings.groovy также работает и фактически использовался.

Кроме того, в этом примере сервер приложений попадает прямо, а веб-сервер не используется.

ответ

3

В Grails 2.2.x установка grails.mime.file.extensions = true наряду с grails.mime.types контролирует расширение в URL-адресе. В принципе, Grails игнорировал расширения, перечисленные в типе mime, и соответствующим образом сопоставлял URL-адрес с контроллером (вот почему mytestpage.html работает, а не mytestpage.exe или mytestpage.anything)

Похоже, что вышеуказанное поведение было изменение в Grails 2.3.x + для поддержки улучшений REST. Даже отображения по умолчанию в URLMappings.groovy изменили accrodingly

//Grails 2.2.x 
"/$controller/$action?/$id?"{ 
    constraints { 
     // apply constraints here 
    } 
} 

в

//Grails 2.3.x 
"/$controller/$action?/$id?(.${format})?"{ 
    constraints { 
     // apply constraints here 
    } 
} 

Ваше решение, кажется, правильный способ решить проблему

+0

Ваш ответ помог мне лучше понять эту концепцию. Благодарю. –

 Смежные вопросы

  • Нет связанных вопросов^_^