Groovy RESTClient在响应处理程序上返回不一致的类型
我正试图为Groovy的RESTClient(围绕HttpBuilder)编写自己的响应处理程序。如果返回了响应主体,我希望始终打印响应主体。然而,我找不到一个一致的方法来做这件事 通常,自定义响应处理程序如下所示: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 -&
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)