Grails URL映射和URL中的斜杠字符

时间:2014-05-30 17:35:53

标签: url grails

我遇到了以下问题:

My Grails(2.2.0)应用程序具有以下URL映射:

"/api/clientQuote/$labcode/$cliCode/$quoCode"(controller: "clientQuote") {
  action = [GET: "get"]
}

我们假设以下值:

$labcode = BRMIN
$cliCode = CL-000236
$quoCode = QT-000965/0-0

由于$ quoCode具有斜杠字符,因此必须将其替换为%2F。这样,可能的URL可能是:

http://myapp.com:9090/CCLASService/api/clientQuote/BRMIN/CL-000236/QT-000965%2F0-0

当我将此URL放在任何浏览器中时,会显示一个空白屏幕作为返回。这很奇怪,因为请求甚至没有到达我的Grails控制器。

另一方面,如果我更改了网址:

http://myapp.com:9090/CCLASService/clientQuote/get?labcode=BRMIN&cliCode=CL-000236&quoCode=QT-000965%2F1-0

一切正常,我收到了对我的请求的正确XML响应。

问题是:为什么当我使用特定的URL映射与编码字符时,我收到一个空白屏幕作为返回?

1 个答案:

答案 0 :(得分:6)

URL映射可以使用$paramName**来允许特定参数中的斜杠 - 这通常用于CMS,您希望将整个虚拟路径层次结构映射到单个控制器,但它可能有用你的情况也是如此。

"/api/clientQuote/$labcode/$cliCode/$quoCode**"(controller: "clientQuote") {
  action = [GET: "get"]
}

即使没有斜线转义,这也允许http://myapp.com:9090/CCLASService/api/clientQuote/BRMIN/CL-000236/QT-000965/0-0