我需要将对象作为xml发送到Web服务。我已经有了pojo,现在我需要使用Groovy将其转换为xml。在grails中我使用了as
关键字,在Groovy中执行此操作的等效代码是什么?
示例Grails代码:
import grails.converters.*
render Airport.findByIata(params.iata) as XML
答案 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
这样的内置类,这使得它变得如此简单。相反,您需要使用MarkupBuilder
或StreamingMarkupBuilder
手动构建XML。
这些都不会自动将POJO或POGO转换为XML,您必须自己手动处理,或使用反射来自动化该过程。
我建议您可以复制grails转换器,但它可能有很多依赖项。不过,它是开源的,如果你需要一个更可重用的组件,这可能是一个起点。