Groovy RESTClient在响应处理程序上返回不一致的类型

Groovy RESTClient在响应处理程序上返回不一致的类型,groovy,httpbuilder,Groovy,Httpbuilder,我正试图为Groovy的RESTClient(围绕HttpBuilder)编写自己的响应处理程序。如果返回了响应主体,我希望始终打印响应主体。然而,我找不到一个一致的方法来做这件事 通常,自定义响应处理程序如下所示: def client = new RESTClient(url) client.handler.success = { resp, reader -> //do stuff } client.handler.failure = { resp, reader -&

我正试图为Groovy的RESTClient(围绕HttpBuilder)编写自己的响应处理程序。如果返回了响应主体,我希望始终打印响应主体。然而,我找不到一个一致的方法来做这件事

通常,自定义响应处理程序如下所示:

def client = new RESTClient(url)

client.handler.success = { resp, reader ->
     //do stuff
}

client.handler.failure = { resp, reader ->
     //do stuff
     throw new Exception("HTTP call failed. Status code: ${resp.getStatus()}")
}

然而,我注意到变量“reader”可以有不同的类,这取决于响应。我看到读者的类型是
groovy.util.slurpersupport.NodeChild
org.apache.http.conn.EofSensorInputStream
。我希望它是一个可预测的类,这样我就可以实际调用这个对象上的方法。这是怎么回事?

将内容类型设置为
ANY
,并将HttpBuilder内容解析器更改为文本解析器,解决了这个问题。响应处理程序中的
reader
类型现在总是
java.io.InputStreamReader

之前:

def headerMap = [:]
//populate headers
def response = client.get("headers":headerMap)
之后:

client.parser.'application/xml' = client.parser.'text/plain'
client.parser.'application/xhtml+xml' = client.parser.'text/plain'
client.parser.'application/atom+xml' = client.parser.'text/plain'
client.parser.'application/json' = client.parser.'text/plain'
client.parser.'text/html' = client.parser.'text/plain'
client.parser.'application/x-www-form-urlencoded' = client.parser.'text/plain'
def headerMap = [:]
//populate headers
def response = client.get("headers":headerMap, contentType:groovyx.net.http.ContentType.ANY)

将内容类型设置为
ANY
,并将HttpBuilder内容解析器更改为文本解析器,解决了此问题。响应处理程序中的
reader
类型现在总是
java.io.InputStreamReader

之前:

def headerMap = [:]
//populate headers
def response = client.get("headers":headerMap)
之后:

client.parser.'application/xml' = client.parser.'text/plain'
client.parser.'application/xhtml+xml' = client.parser.'text/plain'
client.parser.'application/atom+xml' = client.parser.'text/plain'
client.parser.'application/json' = client.parser.'text/plain'
client.parser.'text/html' = client.parser.'text/plain'
client.parser.'application/x-www-form-urlencoded' = client.parser.'text/plain'
def headerMap = [:]
//populate headers
def response = client.get("headers":headerMap, contentType:groovyx.net.http.ContentType.ANY)