我不明白在控制器(不是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和项目字段)。
我该怎么办?
答案 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。