Grails 3.2 - 列出域 class 中不可为空的字段名称

Grails 3.2 - List field names in domain class that are not nullable

如何获取不可为空的域 class 的字段名称列表?

例如,在以下域中:

class MyDomain {
    String field1
    String field2
    String field3
    String field4

    static constraints = {
        field2 nullable: true
        field3 nullable: true
    }
}

如何在控制器中取回列表 ['field1','field4']

我正在验证 CSV 中的行,有些行信息与存储在域中的信息不同,因此最好获取字符串名称列表而不是绑定到命令对象排除项。

您需要使用 PersistentEntity API

Set<String> propertyNames = [] as Set
for (PersistentProperty prop: MyDomain.gormPersistentEntity.persistentProperties) {
    if (!prop.mapping.mappedForm.nullable) {
        propertyNames.add(prop.name)
    }     
}

您可能需要根据需要排除版本或时间戳属性等内容。

可以使用constrainedProperties。它给出了特定域的所有约束 class。

现在您只需要非空约束,然后过滤掉它的结果。

示例:

MyDomain.constrainedProperties.findResults { it.value.nullable ? null : it.key }

输出:

['field1','field4']

For grails 2.x users :

MyDomain.getConstraints().findResults { it.value.nullable ? null : it.key}