使用PUT使用Groovy的HTTP Builder更新JSON数据

时间:2014-01-21 09:36:40

标签: groovy zendesk groovy-console groovyws

我要求使用Groovy HTTP Builder更新Zendesk门票。我使用以下代码

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0-RC2' )
import java.util.Properties;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import groovyx.net.http.*;
import static groovyx.net.http.Method.*;
import groovy.json.*;
import groovyx.net.http.ContentType;

def jsonBuilder = new groovy.json.JsonBuilder();
class MyTicket
{
    def subject
}

        def myTicket = new MyTicket( 
        subject: 'xyz'.toString()
        )
def ticketList=[myTicket]
jsonBuilder(ticket:ticketList)


println(jsonBuilder)

def authSite = new HTTPBuilder('https://{subdomain}.zendesk.com/api/v2/tickets/{ticketid}.json');
authSite.auth.basic 'username', 'password';
authSite.request( Method.PUT, ContentType.JSON )
 {  req ->
 uri.path = ''https://{subdomain}.zendesk.com/api/v2/tickets/{ticketid}.json'';
                requestContentType = ContentType.JSON;
                headers.Accept = 'application/json';
                body =[jsonBuilder]

                response.success = { resp, reader->
                reader.ticket.subject;
    }
}   

但是票证没有更新。有没有任何一种执行方法。请建议我哪里出错了。

1 个答案:

答案 0 :(得分:4)

试试这个,您需要设置subdomainticketiduserpass(我已经删除了所有不必要的导入):

@Grab( 'org.codehaus.groovy.modules.http-builder:http-builder:0.6' )
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.PUT
import static groovyx.net.http.ContentType.JSON

def subdomain = 'woo'
def ticketid  = '123'

def authSite = new HTTPBuilder("https://${subdomain}.zendesk.com/api/v2/tickets/${ticketid}.json");
authSite.auth.basic( 'user', 'pass' )
authSite.request( PUT, JSON ) { req ->
    body = [ ticket:[ subject: 'xyz' ] ]

    response.success = { resp, json ->
        println "Success! ${resp.status}"
    }

    response.failure = { resp ->
        println "Request failed with status ${resp.status}"
    }
}