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

时间:2013-10-01 18:52:07

标签: groovy httpbuilder

我正在尝试为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.NodeChildorg.apache.http.conn.EofSensorInputStream类型。我希望它是一个可预测的类,所以我实际上可以在这个对象上调用方法。这是怎么回事?

1 个答案:

答案 0 :(得分:3)

将内容类型设置为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)