对于我们的大多数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)
}
...
答案 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)