我们需要转储原始XML,以便在Grails 1.2应用上解决数据相关问题。在UrlMappings中,我们有“parseRequest:true”。以下不能得到我正在寻找的,任何其他选择?请注意,我们需要在生产机器上使用它,因此适合开发的小提琴或类似的基于代理的解决方案不是一种选择
def beforeInterceptor = {
println "#"*99
println "Executing action $actionName with params=$params"
println request.inputStream.dump()
//println request.inputStream.text // java.io.IOException: Stream closed
println request.XML
}
答案 0 :(得分:2)
如果我没记错的话,当你执行request.XML时,你应该收到一个XmlSlurper对象。所以这个应该得到你想要的东西。
def beforeInterceptor = {
def xml = request.XML
def xmlString = new XmlNodePrinter(new PrintWriter(new StringWriter())).print(xml)
}
答案 1 :(得分:1)
事实证明request.XML
的类型为groovy.util.slurpersupport.NodeChild,它有一个糟糕的toString()覆盖。所以解决方案是here,将其放在 bootstrap
NodeChild.metaClass.toXmlString = {
def self = delegate
new StreamingMarkupBuilder().bind {
delegate.mkp.xmlDeclaration() // Use this if you want an XML declaration
delegate.out << self
}.toString()
}
这在控制器中:
def beforeInterceptor = {
println "#"*99
log.info "REST CALL [${request.serverName}${request.forwardURI}?${request.queryString}] with [$request.method] action [$actionName]"
println request.XML.toXmlString()
}