gpt4 book ai didi

validation - Grails:如何在 map 上设置 minSize 约束

转载 作者:行者123 更新时间:2023-12-02 07:03:57 24 4
gpt4 key购买 nike

我有这个对象

@Validateable
class Foo {
Map<String, String> items

static constraints = {
items minSize: 1
}
}

但是这个测试失败了:

@Test
void shouldNotValidateIfItemsIsEmpty() {
Foo foo = new Foo(items: [:])

assert !foo.validate()
}

我做错了什么?它应该根据 grails 'minSize' documentation 工作: "设置集合 或数字属性的最小大小。"

最佳答案

文档可能具有误导性。 minSize 约束仅适用于:

  1. 字符串
  2. 数组
  3. 实现 java.util.Collection 接口(interface)的类

java.util.Map但是不扩展 java.util.Collection界面

参见MinSizeConstraintsupports方法:

public boolean supports(Class type) {
return type != null && (
String.class.isAssignableFrom(type) ||
Collection.class.isAssignableFrom(type) ||
type.isArray());
}

您可以自己开发custom constraint对于这个或 Thermech 建议的自定义验证器

此外,为了让 Grails 正确模拟验证方法,您的测试类应该类似于:

@TestMixin(ControllerUnitTestMixin) class FooTest {
@Test
void shouldNotValidateIfItemsIsEmpty() {
Foo foo = mockCommandObject Foo

foo.items = [:]

assert !foo.validate()
} }

关于validation - Grails:如何在 map 上设置 minSize 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483268/

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