参数值包含“.”的 Grails UrlMappings

发布于 2024-07-14 18:28:20 字数 722 浏览 12 评论 0原文

给定此 UrlMapping:

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

与此控制器相结合:

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

以及这些请求:

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

Given this UrlMapping:

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

Combined with this controller:

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

And with these requests:

It seems like Grails cuts the "foobar" parameter at the first dot ("."). Is this intentional? Is there a work-around if I want to use parameters containing dots in my URL mappings?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白龙吟 2024-07-21 18:28:20

设置……来解决

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”设置的值。

This can be solved by setting ...

grails.mime.file.extensions = false

... in Config.groovy.

It seems like Grails is trying to do some MIME magic behind the scene based on the file name suffix.

Updated: Some additional info from the Grails JIRA.

This is the offending code in 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() returns the value of the "grails.mime.file.extensions" setting configured in Config.groovy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文