gpt4 book ai didi

Grails:如何使用命令对象验证由项目列表组成的 POST 正文?

转载 作者:行者123 更新时间:2023-12-02 15:17:50 25 4
gpt4 key购买 nike

我在 grails 3.3.3 中编写自定义验证器(命令)时遇到了一些问题。具体来说,我正在尝试验证其正文由项目列表组成的 POST 请求。这就是我所拥有的...

命令:

class VoteCommand implements Validateable {


List<VoteItem> postList = [].withLazyDefault { new ListItem() }

static constraints = {
postList nullable: false
}

class ListItem implements Validateable {
String tag
String some_id

static constraints = {
some_id nullable: false, blank: false
tag nullable: false, blank: false
tag inList: Tag.values() as List
}
}
}

和有效载荷:
{
"noteVotesButWorks": [

{
"tag": "good"
},
{
"tag": "bad"
}
]
}

此有效负载通过了我的 Controller 操作中的验证检查。
 def save(VoteCommand command) {


println(command.errors) //grails.validation.ValidationErrors: 0 errors



if (command.hasErrors()) {
respond params.errors, view: 'create'
} else {
withFormat {
'*' { render status: CREATED }
}
}

}

对此操作发出 POST 请求后,我得到一个 201grails.validation.ValidationErrors: 0 errors打印到标准输出。

拜托,这里有人可以给我一些指示吗?

最佳答案

Please, can someone here give me some pointers?



您的有效负载包括 key noteVotesButWorks .数据绑定(bind)器将创建 VoteCommand 的实例然后看看有没有 noteVotesButWorks该实例上的属性,并且没有,因此数据绑定(bind)器实际上没有任何事情可做。您的 VoteCommand然后验证实例,通过,因为您唯一的约束是 postList nullable: false , 因为 postList不为空。

这一切都按设计工作。您可能希望有效负载映射中的键与 List 的名称匹配。位于 VoteCommand 的属性(property).

除此之外,没有充分的理由包括 .withLazyDefault { new ListItem() }。在您的属性初始化中。您根本不需要初始化该属性。数据绑定(bind)器将为您完成此操作。

关于Grails:如何使用命令对象验证由项目列表组成的 POST 正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49773594/

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