2009-03-05 90 views
1

鉴于这种urlMapping中:Grails UrlMappings,参数值包含“。”

与此控制器联合:

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

以及与这些请求:

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

回答

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