Grails 2.3.2 / .3升级 - 无法映射以.html结尾的网址

时间:2013-11-25 01:01:23

标签: grails grails-2.0

将grails应用程序从2.2.2升级到2.3.2并最终升级到2.3.3之后,我注意到以前正在运行的一些链接现在返回404状态。

为了说明,以下是最初在v2.2.2中使用的示例链接和相应的URL映射条目:

http://localhost:7080/pages/mytestpage
http://localhost:7080/pages/mytestpage.html

UrlMappings.groovy

static mappings = {
    "pages/mytestpage"(controller: 'testController', action: 'testAction')
}

升级后,在给定的链接中,下面的链接不再起作用(即与.html的链接):

http://localhost:7080/pages/mytestpage.html

解决此问题的一种方法是将URLMappings条目更改为:

UrlMappings.groovy(已修改)

static mappings = {
    "pages/mytestpage(.$format)?"(controller: 'testController', action: 'testAction')
}

我的问题是,有没有办法解决这个问题,而无需更新URLMappings条目?任何能够解释这种映射在版本2.2.2中如何工作的人都将是一个很好的帮助。谢谢!

更新

在UrlMappings.groovy中使用(。html)?代替(。$ format)?也可以正常使用。

此外,在此示例中,直接命中了应用服务器,并且未使用Web服务器。

1 个答案:

答案 0 :(得分:3)

在Grails 2.2.x中,grails.mime.file.extensions = true设置和grails.mime.types控制了网址中的扩展程序。基本上,Grails忽略了mime类型中列出的扩展并相应地将url映射到控制器。(这就是为什么mytestpage.html工作而不是mytestpage.exe和mytestpage.anything)

上面的行为似乎是Grails 2.3.x +中的变化,以支持REST改进。即使URLMappings.groovy中的默认映射也已经发生了相应的更改

//Grails 2.2.x
"/$controller/$action?/$id?"{
    constraints {
        // apply constraints here
    }
}

//Grails 2.3.x
"/$controller/$action?/$id?(.${format})?"{
    constraints {
        // apply constraints here
    }
}

您的解决方案似乎是解决问题的正确方法