Grails UrlMappings со значениями параметров, содержащими “.”

StackOverflow https://stackoverflow.com/questions/615425

Вопрос

Учитывая это сопоставление URL-адресов:

"/foo/$foobar" {
    controller = "foo"
    action = "foo"
    constraints {
    }
}

В сочетании с этим контроллером:

class FooController {
    def foo = {
        def foobar = params.foobar
        println "foobar=" + foobar
    }
}

И с этими просьбами:

Похоже, что 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top