如何从Groovy中的REST客户端获取Slurpable数据?

Joe*_*oeG 2 rest groovy json

我的代码看起来像这样:

def client = new groovyx.net.http.RESTClient('myRestFulURL')

def json = client.get(contentType: JSON) 
net.sf.json.JSON jsonData = json.data as net.sf.json.JSON   
def slurper = new JsonSlurper().parseText(jsonData)
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用!:(上面的代码在parseText中给出了一个错误,因为没有引用json元素.最重要的问题是"数据"作为Map返回,而不是真正的Json.未显示,但是我的第一次尝试,我刚刚通过parseText(json.data),它给出了一个关于无法解析HashMap的错误.

所以我的问题是:如何从RESTClient返回JSON,以便由JsonSlurper解析?

jes*_*ale 6

RESTClient实现类自动解析内容,它似乎并不能阻止它这样做.

但是,如果使用HTTPBuilder,则可以重载该行为.您希望以文本形式返回信息,但如果您只设置contentTypeas TEXT,则无法使用,因为HTTPBuilder使用HTTPBuilder.get()方法的contentType参数来确定要发送的HTTP标头,以及解析要返回的对象.在这种情况下,您需要在标头中,但您需要解析(即,不解析).Acceptapplication/jsonAcceptTEXT

你解决这个问题的方法是在调用它之前AcceptHTTPBuilder对象上设置标题get().这将覆盖否则将在其上设置的标头.以下代码适用于我.

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.6')
import static groovyx.net.http.ContentType.TEXT

def client = new groovyx.net.http.HTTPBuilder('myRestFulURL')
client.setHeaders(Accept: 'application/json')

def json = client.get(contentType: TEXT)
def slurper = new groovy.json.JsonSlurper().parse(json)
Run Code Online (Sandbox Code Playgroud)