首页 > 解决方案 > 如何在 Grails 4.x 上配置域编组器

问题描述

我正在尝试修复从 Grails 3.x Domain Marshaller 到 Grails 4.x 的升级,请参阅下面我正在使用的代码

import org.grails.datastore.mapping.model.PersistentEntity

class DomainClassMarshaller {
     public static final List<String> appendFields = ['id']

    static Closure appendMarshaller(String clazz, List<String> fieldsToInclude) {
        def grailsDomainClassMappingContext
        return { domainItem ->
            def domain = grailsDomainClassMappingContext.getPersistentEntity(clazz)
            def results = [:]
            domain.persistentProperties.each { field ->
                results[field.name] = domainItem[field.name]
            }
            def fields = []
            fields.addAll(appendFields)
            fields.addAll(fieldsToInclude)
            //println "size:" +fields.size();
            fields.each { name ->
                results[name] = domainItem[name]
                //println "name :"+name+" value:"+domainItem[name];
            }
            return results
        }
    }

    static Closure limitIncludes(Class clazz, List<String> fieldsToInclude) {
        def grailsDomainClassMappingContext
        return { domainItem ->
            def domain = grailsDomainClassMappingContext.getPersistentEntity(clazz)
            def results = [:]
            def fields = []
            fields.addAll(appendFields)
            fields.addAll(fieldsToInclude)
            fields.each { name ->
                results[name] = domainItem[name]
            }
            return results
        }
    }

    static Closure excludes(Class clazz, List<String> fieldsToExclude = []) {
        def grailsDomainClassMappingContext
        return { domainItem ->
            def domain = grailsDomainClassMappingContext.getPersistentEntity(clazz)

            def results = [:]
            domain.persistentProperties.each { field ->
                if (!(field.name in fieldsToExclude))
                    results[field.name] = domainItem[field.name]
            }
            appendFields.each { name ->
                results[name] = domainItem[name]
            }
            return results
        }
    }
}

出于某种原因不喜欢这种新方法,我一直得到一个

Caused by: java.lang.NullPointerException: Cannot invoke method getPersistentEntity() on null object

不知道大家有什么建议,不胜感激

标签: javagrailsgrails-orm

解决方案


推荐阅读