在基于Grails的开发中,使用代码
def databases = Database.findAll() render databases as XML
的话,它输出
<?xml version="1.0" encoding="UTF-8"?> <list> <database id="1"> <description>Our first database</description> <entities> <entity id="3" /> </entities> <name>db1@grs-cro.com</name> </database> </list>
但是,我还需要一些附加的信息,如msg, status等。
如果用groovy.xml.MarkupBuilder的话,需要写遍历对象各属性的代码,觉得这样不爽。放弃。
看了看grails.converters.XML的代码,460的LOC,头大。我不想再造个轮子出来。
最后,还是偷懒的办法最好:
class ResponseXmlWrapper { static String wrapXml(params) { """ <?xml version="1.0" encoding="UTF-8"?> <response> <msg>${params.msg}</msg> <status>${params.status}</status> <data> ${params.xml.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "")} </data> </response> """ } }
用
render ResponseXmlWrapper.wrapXml(msg:"ok", status:"1", xml:(databases as XML) as String)
代替
render databases as XML
它输出为
<?xml version="1.0" encoding="UTF-8"?> <response> <msg>ok</msg> <status>1</status> <data> <list> <database id="1"> <description>Our first database</description> <entities> <entity id="3" /> </entities> <name>db1@grs-cro.com</name> </database> </list> </data> </response>