我有一个要求将xml发送到webservice的对象。我已经有了pojo,现在我需要使用Groovy将其转换为xml。在Grails中我使用了as
关键字,在Groovy中做什么等效代码?如何使用“as”关键字将pojo转换为xml
实施例的Grails代码:
import grails.converters.*
render Airport.findByIata(params.iata) as XML
我有一个要求将xml发送到webservice的对象。我已经有了pojo,现在我需要使用Groovy将其转换为xml。在Grails中我使用了as
关键字,在Groovy中做什么等效代码?如何使用“as”关键字将pojo转换为xml
实施例的Grails代码:
import grails.converters.*
render Airport.findByIata(params.iata) as XML
与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>
的as
关键字实际上是Groovy语言规范的一部分。您缺少的部分是进行转换的XML类。这实际上只是一个幻想的类,它会走POJO并编写XML(可能使用MarkupBuilder
)。
Groovy没有像grails.converters.XML
这样的内置类,使它变得如此简单。相反,您需要使用MarkupBuilder
或StreamingMarkupBuilder
手动构建XML。
这些都不会自动将POJO或POGO转换为XML,您必须自己手动处理,或者使用反射来自动化处理。
我建议你或许可以复制grails转换器,但它可能有很多依赖关系。不过,它是开源的,如果你需要一个更可重用的组件,这可能是一个起点。