【发布时间】:2014-02-06 02:15:24
【问题描述】:
默认情况下,Grails 以 XML 格式呈现 List,其根部带有 <list> 元素标签。同样,它使用<map> 渲染地图。我想控制根元素的名称。
如果我要返回用户的 ArrayList,那么我想看看:
<users>
<user>...</user>
<user>...</user>
</users>
我怎样才能实现上述目标?以下是要求:
- 很容易将此序列化应用于 50 多个域类
- 从开发人员那里提取,因此在渲染域对象期间不需要显式编码(即,当调用
render()或respond()时,仍然传入一个 ArrayList,没有像as MyNewType这样的显式转换/转换) - 能够处理空列表的边缘情况(应该返回
<users/>)
锦上添花:
- 如果这个公式也可以应用于地图,那就太好了:)
我在实现上述目标方面取得了半成功,但我不知道如何解释空列表的情况。我实现了我自己的 ObjectMarshaller,它呈现所有类型为List 的对象。只要列表包含一个元素,我就可以检查元素的类型并确定复数标记名称应该是什么(用户 => 用户)。但是如果列表是空的,并且由于 Java 泛型是通过擦除(除非在 Groovy 中有所不同?),那么除了默认为 <list/> 之类的东西之外,我无法正确命名一个空列表,这是不可接受的。
我经历过的一些资源:
- http://www.cacoethes.co.uk/blog/groovyandgrails/dry-json-and-xml-with-grails
- http://grails.1312388.n4.nabble.com/Custom-XML-Marshaller-change-the-root-element-name-td4649949.html
- http://jwicz.wordpress.com/2011/07/11/grails-custom-xml-marshaller/
- http://mrhaki.blogspot.com/2013/11/grails-goodness-register-custom.html
- http://manbuildswebsite.com/2010/02/15/rendering-json-in-grails-part-3-customise-your-json-with-object-marshallers/
【问题讨论】:
标签: java xml grails serialization marshalling