我有这个对象
@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工作:“设置集合或数字属性的最小大小。”
答案 0 :(得分:7)
文档可能会产生误导。 minSize约束仅适用于:
java.util.Map但不会扩展java.util.Collection接口
请参阅supports
的{{1}}方法:
MinSizeConstraint
根据Thermech的建议,您可以为此开发自己的custom constraint或自定义验证器
此外,为了让Grails正确地模拟验证方法,您的测试类应该是这样的:
public boolean supports(Class type) {
return type != null && (
String.class.isAssignableFrom(type) ||
Collection.class.isAssignableFrom(type) ||
type.isArray());
}
答案 1 :(得分:1)
我找到的唯一方法是使用自定义验证器:
static constraints = {
items validator: { Map map, obj, errors ->
if (map.size() < 1) errors.rejectValue('items', 'minSize.notmet')
}
}