Grails UrlMappings,参数值包含“。”

时间:2009-03-05 16:04:01

标签: grails friendly-url url-mapping

鉴于此UrlMapping:

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

结合此控制器:

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

并提出这些要求:

似乎Grails在第一个点(“。”)处切掉了“foobar”参数。这是故意的吗?如果我想在URL映射中使用包含点的参数,是否有解决办法?

1 个答案:

答案 0 :(得分:4)

这可以通过设置......

来解决
grails.mime.file.extensions = false

...在Config.groovy。

似乎Grails试图根据文件名后缀在场景后面做一些MIME魔术。

更新: Grails JIRA的一些其他信息。

这是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()返回Config.groovy中配置的“grails.mime.file.extensions”设置的值。