我希望发布请求的每个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
}
答案 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
是您要使用的课程