在grails 2.4.0中将对象渲染为json时排除属性

时间:2014-08-28 15:27:45

标签: json grails

我不明白在控制器(不是RESTController而是经典控制器)中将对象渲染为JSON时,如何排除某些属性。 我有这个resources.groovy:

// Place your Spring DSL code here
import grails.rest.render.json.JsonRenderer
import com.appromocodes.Promocode
import com.appromocodes.ResponseStatus
import grails.rest.render.json.JsonCollectionRenderer

beans = {
    responseStatusRenderer(JsonRenderer, ResponseStatus) {
        excludes = ['enumType']
    }

    promocodeRenderer(JsonRenderer, Promocode) {
        excludes = ['class', 'id', 'project']
    }

}

在我的控制器中,我尝试了以下操作:

respond p as JSON

但这仍然给了我所有的字段(也是类,id和项目字段)。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

处理此问题的正确方法是为您的对象注册自定义JSON编组程序。首先在src/groovy/packageName/marshallers/PromocodeMarshaller.groovy中创建一个新的Marshaller,其中包含以下内容:

import packageName.Promocode
import grails.converters.JSON

class PromocodeMarshaller {

  void register() {
    JSON.registerObjectMarshaller(Promocode) { promocode ->
      return [
        id: promocode?.id,
        // all the fields you'd like to return
        // in your JSON object 
      ]
    }
  }
}

然后,在Bootstrap.groovy文件内,包含以下内容:

import packageName.marshallers.PromocodeMarshaller

def promodcodeMarshaller = new PromocodeMarshaller()
promocodeMarshaller.register()

有关完整说明,请参阅this article