1

我正在尝试为 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。我希望它是一个可预测的类,所以我实际上可以调用这个对象的方法。这里发生了什么?

4

1 回答 1

4

将内容类型设置为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)
于 2013-10-01T19:05:16.610 回答