【发布时间】:2014-10-23 18:14:45
【问题描述】:
我无法使用指定的命名配置将对象呈现为 JSON。我做错了什么?
我在 Bootstrap.groovy 初始化方法中定义了一个命名配置
import com.appromocodes.Project
import com.appromocodes.Promocode
import grails.converters.JSON
class BootStrap {
def init = { servletContext ->
JSON.createNamedConfig('apiCheck', {
JSON.registerObjectMarshaller(Promocode) { Promocode promocode ->
def map= [:]
map['code'] = promocode.code
map['allowedUses'] = promocode.allowedUses
map['customInfo'] = promocode.customInfo
return map
}
})
}
def destroy = {
}
}
然后我有一个经典的控制器(不是 REST,而是简单的控制器):
import grails.converters.JSON
class ApiV1Controller {
def apiV1Service
def check() {
log.info("check");
def resultMap = apiV1Service.checkPromocode(params.projectKey, params.code)
if (resultMap.statusCode != ResponseStatus.PROMOCODE_USED) {
}
def p = Promocode.get(1)
JSON.use('apiCheck', {
render p as JSON
})
}
}
我希望检查操作的调用将仅输出 apiCheck 命名配置中指定的三个属性,而不是我得到所有 bean 属性以及元类属性“class”和“id”。
如果我没有指定命名配置,那么 JSON 会正确渲染 bean,只显示三个属性。
怎么了?是否也可以在非 REST 控制器中使用 namedConfig?
【问题讨论】: