gpt4 book ai didi

grails - Grails 命令对象可以有可变数量的参数吗?

转载 作者:行者123 更新时间:2023-12-01 15:39:00 25 4
gpt4 key购买 nike

我们在 Grails 2.0.1 中使用带有 Grails Controller 的命令对象。这是一个了不起的功能,并导致了非常漂亮、简洁的 Controller ,具有完全验证的参数。我有一个案例,在 Controller 中实现了一个 Web 服务调用,其中有一些固定参数,然后是一些可变长度参数。我到处搜索,似乎找不到示例。一般来说,grails 文档对命令对象相当简洁。我可以在没有 Command 对象的情况下做我想做的事,但是我会打破这组 Controller 中的模式,在这种模式下,每个其他调用都使用一个 Command 对象。 FWIW 这个特定的调用是一个将数据提交到后端的 POST。这里没有域对象,数据正在转换为电子表格中的一行。我们当然可以创建一个域对象来对数据建模,但我不确定这是否有助于以任何方式解决问题。

我不确定代码示例是否有帮助,但无论如何这里有一个:

package com.companyname.platform.api

class ApiController {
static allowedMethods = [save:'POST', close:'POST', storeResults: 'POST']

def save = { APISaveCommand cmd->
doSaveAction(cmd)
}
def close = APICloseCommand cmd->
doCloseAction(cmd)
}
def storeResults = { params->
doStoreResults(params)
}
}
}

看看 storeResults 怎么没有 Command 对象?它需要可变数量的参数。在上面的代码中,假设 do*Action 方法位于已注入(inject)此 Controller 的服务中。 doStoreResults(params) 没什么问题,但我真的很想坚持使用命令对象模式。

最佳答案

根据您的评论,是的,在这种情况下可以使用命令。 Juts 在命令中声明所有字段并实现 custom validators必须成对声明的字段。

在验证器中,您可以访问字段值和对象实例,因此您可以轻松比较其中一个是否为空,另一个是否不为空。

@Validateable
class MyCommand {
String a
String b
String c

static constraints = {
a nullable: false, blank: false
b validator: { val, obj ->
if((!val && obj.c) || (val && !obj.c)) {
return 'mycommand.declareBAndC.message' //key to the i18n message
}
}
}

}

关于grails - Grails 命令对象可以有可变数量的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13805934/

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