在基于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>
本文介绍了一种在Grails应用中渲染带有额外信息的XML数据的方法。通过自定义一个XML包装类,可以在输出数据库信息的同时,加入状态和消息等字段,避免了使用MarkupBuilder带来的代码冗余。
1167

被折叠的 条评论
为什么被折叠?



