有没有办法为Grails JSON响应添加额外的字段?

时间:2012-05-23 09:37:02

标签: json grails groovy

我希望发布请求的每个JSON响应都包含一个字段success。在那里添加这个字段的最佳方法是什么?

我使用这样的代码生成JSON响应:

try {
    def entity = myService.saveEntity(arg1,arg2)
    render entity as JSON //I want to add artificial field 'success = "yes"' here
} catch (ValidationException e) {
    render parseErrors(e.errors) as JSON //field 'success = "no"' here
}

3 个答案:

答案 0 :(得分:7)

本周我只是在努力解决这个问题。我想将一个域类作为JSON发回,但同时添加一个可能包含其他信息的'errorMessage'属性。

事实证明,当在grails中使用作为JSON 时,它会发送回转换器对象,但可以使用 JSON.parse()将该转换器实例转换为jsonObject我们可以轻松地将新值添加到。

def jsonObject = JSON.parse((entity AS JSON).toString())
jsonObject.put("success", "yes")
render jsonObject as JSON

我认为有几种不同的方法,但最终对我来说最简单,因为我已经为大多数域类提供了自定义转换器,而且我不想在我的域对象中添加任何其他瞬态属性。

答案 1 :(得分:4)

您是否可以返回包含success字段的地图,并将对象包装在单独的变量中:

try {
    def entity = myService.saveEntity(arg1,arg2)
    render [ success:'yes', val:entity ] as JSON
} catch (ValidationException e) {
    render [ success:'no', val:parseErrors(e.errors) ] as JSON
}

没试过它......

答案 2 :(得分:4)

您可以注册自己的JSON编组程序(例如BootStrap.groovy),例如:

JSON.registerObjectMarshaller(MyEntity) { MyEntity it ->
  return [
    someField : it.someField, // you should specify fields for output, or put all '.properties'
    success   : true // as I understand you always have 'true' for real entity
  ]
}

其中MyEntity是您要使用的课程