如何在Grails 3.3.10中使用自定义约束?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Grails 3.3.10中使用自定义约束?相关的知识,希望对你有一定的参考价值。
我们正在从Grails 2.5.4迁移到Grails 3.3.10。在众多障碍中,一个是我们的注册自定义内容不再起作用。通过一些研究,我们发现Grails 3.3.10中有一种新方法可以声明和注册这些约束。
即使执行了这些步骤,似乎这些约束也被简单地忽略了。我在这里想念什么吗?
自定义约束类:
package com.simpleinteract.constraints
import com.simpleinteract.utils.SimpleInteractDateUtils
import org.grails.datastore.gorm.validation.constraints.AbstractConstraint
import org.springframework.context.MessageSource
import org.springframework.validation.Errors
class DateOfBirthConstraint extends AbstractConstraint
static final String CONSTRAINT_NAME = "dob"
static final IntRange YEAR_RANGE = (1890..(SimpleInteractDateUtils.currentYear))
static final String DEFAULT_CODE = "invalid"
static final String DEFAULT_MESSAGE_CODE = "default.dateOfBirth.invalid.message"
private final boolean dob;
public DateOfBirthConstraint(Class<?> constraintOwningClass, String constraintPropertyName, Object constraintParameter, MessageSource messageSource)
super(constraintOwningClass, constraintPropertyName, constraintParameter, messageSource);
this.dob = (boolean) this.constraintParameter;
/* (non-Javadoc)
* @see org.grails.validation.Constraint#supports(java.lang.Class)
*/
@SuppressWarnings("rawtypes")
public boolean supports(Class type)
return type != null && String.class.isAssignableFrom(type);
@Override
protected Object validateParameter(Object constraintParameter)
if (!(constraintParameter instanceof Boolean))
throw new IllegalArgumentException("Parameter for constraint [" +
dob + "] of property [" +
constraintPropertyName + "] of class [" + constraintOwningClass +
"] must be a boolean value");
return constraintParameter;
public String getName()
return CONSTRAINT_NAME;
@Override
protected void processValidate(Object target, Object propertyValue, Errors errors)
if (!dob)
return;
Object[] args = [constraintPropertyName, constraintOwningClass, propertyValue]
if (isValid(propertyValue))
rejectValue(target, errors, DEFAULT_MESSAGE_CODE,
CONSTRAINT_NAME + DEFAULT_CODE, args);
protected void isValid(propertyValue)
!(propertyValue && propertyValue instanceof Date && (!YEAR_RANGE?.contains(SimpleInteractDateUtils.getYear(propertyValue)) || propertyValue >= new Date()?.clearTime()))
我正在如下所示在Bootstrap.groovy的init块中注册此约束:
ValidatorRegistry gormValidatorRegistry
gormValidatorRegistry.addConstraint(DateOfBirthConstraint)
我看到此约束已添加到注册表中,如下所示:
ctx.gormValidatorRegistry.findConstraintFactories(DateOfBirthConstraint)*.properties
我在可验证的类中使用了以下约束:
class IdentityCO implements Validateable
Date dateOfBirth
IdentityCO()
static constraints =
dateOfBirth nullable: false, dob: true
答案
我有同样的问题-这是一个错误吗?
以上是关于如何在Grails 3.3.10中使用自定义约束?的主要内容,如果未能解决你的问题,请参考以下文章