0

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

我已经深入研究了 Grails渲染命令,但没有看到任何控制此输出的方法。我希望我们也可以在 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)
}
...
4

1 回答 1

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)
于 2013-10-17T14:51:47.147 回答