我可以手动将Grails路由逻辑应用于包含URL的String吗?

时间:2013-08-28 03:17:58

标签: grails routing url-mapping

在运行时,我的应用程序将提供一个字符串,可能是我的应用程序所服务的有效URL(每UrlMappings.groovy),或者可能不是。我想确定是哪种情况。

我是否有办法手动将Grails路由逻辑应用于URL,并查看它映射到哪个控制器/参数(如果有)?

为了清楚起见,我们说UrlMappings是:

"/path/one" (controller:"api", action:"one")
"/path/two" (controller:"api", action:"two")
"/variable/$segment/1" (controller:"api", action:"var")

现在我的应用程序在运行时收到一个字符串,其值为“/ path / fake” - 我可以针对所有已知路由的列表测试“/ path / fake”以确定它不匹配吗? (或者,我可以测试“/ variable / segA / 1”并确定它与我的API控制器的“var”操作相关联吗?“

注意:我正在寻找适用于带变量等的路径的解决方案 - 并将使用这些变量填充params数组。

1 个答案:

答案 0 :(得分:1)

使用UrlMappings检查grailsApplication中可用的映射列表中是否存在映射,这些映射可以很容易地插入到控制器/服务等伪像中。

def allMappings = grailsApplication.allClasses
                        .find{it.name == "UrlMappings"}.mappings.urlMappings

assert '/path/one' == allMappings.find{it.toString() == "/path/one"}?.toString()
assert !allMappings.find{it.toString() == "/path/fake"}?.toString()