使用Grails render命令控制XML格式的换行符

时间:2013-10-17 14:15:22

标签: xml grails groovy

对于我们的大多数REST服务,我们使用XML的自动编组来输出结果。我们的测试小组报告他们在结果中获得了意想不到的新行(见下文)。我相信这两个结果是等价的,因为唯一的区别是可忽略的空格,测试应该是将结果解析为XML而不是进行字符串比较。无论如何,我个人的偏好是提供更加清晰的测试所需的XML版本,但我的实际方面却说不管它。

我已经完成了对Grails render命令的一些挖掘,但没有看到任何控制此输出的方法。我希望我们可以在Config.groovy中设置一些东西来控制它,但我也找不到任何东西。有什么建议吗?

我们正在:

<?xml version="1.0" encoding="UTF-8"?>
<profile id="45">
  <management id="6"/>
  <name>
    TESTING_MGT_DOC
  </name>
  <type>
    MGT
  </type>
  <user id="43"/>
</profile>

测试期待:

<?xml version="1.0" encoding="UTF-8"?>
<profile id="45">
   <management id="6"/>
   <name>TESTING_MGT_DOC</name>
   <type>MGT</type>
   <user id="43"/>
</profile> 

我们在控制器中通过简单的单行调用生成这些结果。

来自ProfileController.groovy

...
if(param.name){
    render profileService.getProfileByName(param.name) as XML
}
...

来自ProfileService.groovy

...
def getProfileByName(def name){
    return Profile.findByProfileName(name)
}
...

1 个答案:

答案 0 :(得分:1)

Grails的唯一配置是grails.converters.xml.pretty.print。根据您的输出,它似乎设置为true

看看Groovy,似乎XmlUtil.serialize()将格式化您需要的方式。因此,请在Config.groovy中返回false,并将控制器更改为:

String xml = profileService.getProfileByName(param.name) as XML
render contentType: 'application/xml', text: XmlUtil.serialize(xml)