【问题标题】:RESTful Grails: how do I include related entities in my XML?RESTful Grails:如何在我的 XML 中包含相关实体?
【发布时间】:2009-01-19 05:43:09
【问题描述】:

假设我有一个名为 Store 的类,它有很多员工。我的 RESTful listXML 方法如下所示:

def listXML = {
    render Store.list() as XML
}

结果如下所示:

<stores>
  <store id="1">
   <name>My Store</name>
   <employees>
     <employee id="1" />
   </employees>
  </store>
</store>

我的问题是,如何包含每个 Employee 类的所有数据,以便我的 XML 看起来像这样?

   <stores>
      <store id="1">
       <name>My Store</name>
       <employees>
         <employee id="1">
           <name>John Smith</name>
           <hireDate>2008-01-01</hireDate>
         </employee>
       </employees>
      </store>
    </store>

【问题讨论】:

    标签: rest grails groovy


    【解决方案1】:

    在您的控制器中,您需要导入深度转换器:

    import grails.converters.deep.XML
    

    您可以在Converters Reference 的前几段中了解它。

    【讨论】:

    • 哇-非常感谢您的快速回答。我很高兴解决方案如此简单!
    • 呵呵,没问题。很高兴我能帮上忙。
    • 我有一个简单的问题,我们真的应该使用深度转换器并在配置中将其设置为默认值吗?它不会影响查询和响应,因为它包含太多关于完整层次结构的信息吗?
    【解决方案2】:

    从 Grails 1.1 开始,您可以将 Grails 配置为默认深度序列化,方法是将其包含在 grails-app/conf/Config.groovy 中:

    grails.converters.xml.default.deep = true
    

    1.1 还为转换器引入了命名配置。深度转换器将被弃用,而应使用命名配置“深度”。

    XML.use("deep") {
       render model as XML
    }
    

    【讨论】:

    • 不幸的是,这只允许静态配置,如果您有时只需要渲染深层 XML(而其他时候渲染浅层),这有时不是最佳选择。这里有一个开放的 JIRA (jira.codehaus.org/browse/GRAILS-5972),所以修复后,这个问题的解决方案可能会再次改变:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多