我正在尝试创建一个模拟休息服务。这基本上有两个组成部分。我需要一个带有动作和视图的控制器,它允许我创建 ResourceMappings,在其中创建 uri 和我将传回的模拟响应之间的映射。第二个组件是所有其他 url 的包罗万象的 Grails url 映射,因此当他们点击此应用程序的 uri 时,它们将被发送到我的 catch all 控制器,该控制器将返回他们之前创建的映射响应。
例如......我去网址http://someserver.com:1234/restMapping/list。此 url 是 catch all 规则的例外。它把我带到了一些允许我创建休息 uri 映射的视图。在这里,我创建映射 /mockservice/test 并给它响应“这是一个测试”,内容类型为 text/plain。现在,如果我访问 url http://someserver.com:1234/mockservice/test我应该抓住所有发送给我的控制器,该控制器返回一个内容类型为 text/plain 的页面和响应“这是一个测试”。
我尝试了以下方法,但似乎不起作用。有没有人有任何想法?
static mappings = {
"/$control/**" {
controller = "catchAllHandler"
action = "index"
constraints {
control(validator: {!['restMapping','css','js','images'].contains(it)})
}
}
"/$controller/$action?/$id?"{
}
"/"(controller:"restMapping", action="index")
"500"(view:'/error')
}
需要注意的一件有趣的事情是,当我摆脱 ** 并添加大量额外变量时,例如 $s1?/$s2?/$s3? 等等然后它似乎确实有效。问题是我不知道我试图映射的 uri 有多长,所以我宁愿使用 ** 来捕获我所拥有的少数异常中的所有异常。