Grails 如何使用";将pojo转换为xml;作为「;关键词

Grails 如何使用";将pojo转换为xml;作为「;关键词,grails,groovy,xml-serialization,Grails,Groovy,Xml Serialization,我需要将对象作为xml发送到Web服务。我已经有了pojo,现在我需要使用Groovy将其转换为xml。在grails中,我使用了作为关键字,在Groovy中实现这一点的等效代码是什么 Grails代码示例: import grails.converters.* render Airport.findByIata(params.iata) as XML as关键字实际上是Groovy语言规范的一部分。您缺少的部分是执行转换的XML类。这实际上只是一个奇特的类,它遍历POJO并编写XML(可能使

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

Grails代码示例:

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

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

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

这两种方法都不会自动将POJO或POGO转换为XML,您必须自己手动处理,或者使用反射自动处理


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

使用
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>