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

3
我是一个有用的助手,可以为您翻译以下内容:

我面临以下问题:

我的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控制器。
另一方面,如果我将URL更改为:

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

一切都正常工作,我收到了正确的XML响应。

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


看起来你正在访问错误的URL(与你创建的映射不对应)。尝试将URL中的clientQuote更改为clientProject。http://myapp.com:9090/CCLASService/api/clientProject/BRMIN/CL-000236/QT-000965%2F0-0 - blacktide
抱歉,我在提问时打错了一个字。问题已经在问题中修正了。 - cantoni
2
如果您使用"/api/clientQuote/$labcode/$cliCode/$quoCode**",是否有效(这将允许quoCode中含有斜杠)? - Ian Roberts
非常感谢@IanRoberts,你救了我的一天。请把你的评论发布为答案,这样我就可以接受它了。 - cantoni
1个回答

7

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甚至没有斜杠转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接