gpt4 book ai didi

grails - 如何在 grails Controller 中使用路径变量?

转载 作者:行者123 更新时间:2023-12-04 16:44:03 25 4
gpt4 key购买 nike

我一直在尝试在 grails Controller 中使用路径变量,但我无法实现。
背后的意图是验证提交给我需要强制执行的 url 的参数。我无法通过 RequestParam 实现它,所以我切换到 PathVariable 以便提交没有所需参数的 url 应该由 grails Controller 本身过滤掉,而不是我添加 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)
}
}

我尝试在 Controller 中使用 @PathVariable 和 @RequestParam 之类的 spring 注释,如下所示:-
 def action(@PathVariable("paramName") String param){
//code goes here
}

最佳答案

如果您将方法参数命名为与请求参数重命名相同的名称,Grails 会为您处理...

// In UrlMappings.groovy
"/foo/$someVariable/$someOtherVariable" {
controller = 'demo'
action = 'magic'
}

然后在您的 Controller 中:
// grails-app/controllers/com/demo/DemoController.groovy
class DemoController {
def magic(String someOtherVariable, String someVariable) {
// a request to /foo/jeff/brown will result in
// this action being invoked, someOtherVariable will be
// "brown" and someVariable will be "jeff"
}
}

我希望这有帮助。

编辑:

另外一个选项...

如果由于某种原因您想要方法参数的不同名称,您可以像这样将方法参数显式映射到请求参数......
import grails.web.RequestParameter
class DemoController {
def magic(@RequestParameter('someVariable') String s1,
@RequestParameter('someOtherVariable') String s2) {
// a request to /foo/jeff/brown will result in
// this action being invoked, s2 will be
// "brown" and s1 will be "jeff"
}
}

关于grails - 如何在 grails Controller 中使用路径变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com