如何使用“as”关键字将pojo转换为xml

时间:2012-01-18 06:08:48

标签: grails groovy xml-serialization

我需要将对象作为xml发送到Web服务。我已经有了pojo,现在我需要使用Groovy将其转换为xml。在grails中我使用了as关键字,在Groovy中执行此操作的等效代码是什么?

示例Grails代码:

import grails.converters.*
render Airport.findByIata(params.iata) as XML

2 个答案:

答案 0 :(得分:6)

使用StreamingMarkupBuilder执行此操作的一个简单示例是:

class Airport {
  String name
  String code
  int id
}

Writable pogoToXml( object ) {
  new groovy.xml.StreamingMarkupBuilder().bind {
    "${object.getClass().name}" {
      object.getClass().declaredFields.grep { !it.synthetic }.name.each { n ->
        "$n"( object."$n" )
      }
    }
  }
}

println pogoToXml( new Airport( name:'Manchester', code:'MAN', id:1 ) )

哪个应该打印:

<Airport><name>Manchester</name><code>MAN</code><id>1</id></Airport>

答案 1 :(得分:1)

as关键字实际上是Groovy语言规范的一部分。您缺少的部分是执行转换的XML类。这实际上只是一个花哨的类,它遍历POJO并编写XML(可能使用MarkupBuilder)。

Groovy没有像grails.converters.XML这样的内置类,这使得它变得如此简单。相反,您需要使用MarkupBuilderStreamingMarkupBuilder手动构建XML。

这些都不会自动将POJO或POGO转换为XML,您必须自己手动处理,或使用反射来自动化该过程。

我建议您可以复制grails转换器,但它可能有很多依赖项。不过,它是开源的,如果你需要一个更可重用的组件,这可能是一个起点。