Grails UrlMappings со значениями параметров, содержащими “.”
-
03-07-2019 - |
Вопрос
Учитывая это сопоставление URL-адресов:
"/foo/$foobar" {
controller = "foo"
action = "foo"
constraints {
}
}
В сочетании с этим контроллером:
class FooController {
def foo = {
def foobar = params.foobar
println "foobar=" + foobar
}
}
И с этими просьбами:
- http://localhost:8080/app/foo/example.com выдайте результат "foobar=example".
- http://localhost:8080/app/foo/examplecom выдайте результат "foobar=examplecom".
Похоже, что Grails отключает параметр "foobar" в первой точке (".").Это сделано намеренно?Есть ли обходной путь, если я хочу использовать параметры, содержащие точки, в моих сопоставлениях URL?
Решение
Это можно решить с помощью настройки ...
grails.mime.file.extensions = false
...в Config.groovy.
Похоже, Grails пытается сотворить какую-то MIME-магию за сценой, основываясь на суффиксе имени файла.
Обновленный: Некоторая дополнительная информация из Граали ДЖИРЫ.
Это оскорбительный код в UrlMappingsFilter.java:
if(WebUtils.areFileExtensionsEnabled()) {
String format = WebUtils.getFormatFromURI(uri);
if(format!=null) {
MimeType[] configuredMimes = MimeType.getConfiguredMimeTypes();
// only remove the file extension if its one of the configured mimes in Config.groovy
for (MimeType configuredMime : configuredMimes) {
if (configuredMime.getExtension().equals(format)) {
request.setAttribute(GrailsApplicationAttributes.CONTENT_FORMAT, format);
uri = uri.substring(0, (uri.length() - format.length() - 1));
break;
}
}
}
}
WebUtils.areFileExtensionsEnabled() возвращает значение параметра "grails.mime.file.extensions", настроенного в Config.groovy.
Не связан с StackOverflow