【发布时间】:2014-08-23 04:20:02
【问题描述】:
我一直在尝试在 grails 控制器中使用路径变量,但我无法实现。 背后的目的是验证提交到我需要强制执行的 url 的参数。我无法通过 RequestParam 实现它,所以我切换到 PathVariable 以便提交的没有所需参数的 url 应该被 grails 控制器本身过滤掉,而不是我添加 if/else 检查有效性。
所以,我可以说明如下: 我的网址如下:-
'<appcontext>/<controller>/<action>?<paramName>=<something>'
现在,要强制“paramName”,我在 Grails 中找不到任何方法(Spring MVC 提供了 @RequestParam 注释,可以让我将“required”设为 true)。
我认为的另一种选择是使用路径变量,以便可以将“paramName”包含在 URL 本身中。所以我尝试如下:
'<appcontext>/<controller>/<action>/$paramName'
为了验证上面的 URL,我编写了特定的映射,但有些映射也不起作用..
以下是我写的具体映射:-
"/<controllerName>/<action>/$paramName" {
controller:<controller to take request>
action:<action to do task>
constraints {
paramName(nullable: false,empty:false, blank: false)
}
}
我尝试在控制器中使用 @PathVariable 和 @RequestParam 之类的弹簧注释,如下所示:-
def action(@PathVariable("paramName") String param){
//code goes here
}
【问题讨论】:
-
“它怎么也行不通”——到底出了什么问题?请记住,约束只是决定这个特定的 URL 映射是否可以应用于某个请求。如果您有其他可以匹配相同 URL 的映射(例如通用
"$controller/$action?/$id?"映射),那么可能是您的约束实际上工作正常,拒绝该特定映射,但是通过不同的映射调用同一个控制器. -
用
nullable: false, empty: false, blank: false约束参数实际上并没有做任何事情。由于映射不包括?,因此必须存在参数才能应用此映射。您可以消除这些限制。
标签: grails parameters grails-controller