2014-01-21 35 views
1

我有更新使用Groovy的HTTP生成器的Zendesk门票的需求。我使用下面的代码更新JSON数据与Groovy的HTTP生成器使用PUT

@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; 
    } 
} 

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

+0

任何错误?什么是json的样子?这可以吗?很难看到发生了什么,代码有点乱.-( –

+0

@tim_yates:最初我正在构建JSON并通过body发送它,没有错误,它的格式是{“ticket”:[{“subject “:” XYZ“}]},但值未更新 –

+0

如果我使用的内容类型URLENC我收到以下错误ava.lang.NullPointerException:。空对象 –

回答

3

试试这个,你需要设置你的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}" 
    } 
} 
+0

上无法获得产权‘主体’我执行下面的代码,但与下面的错误请求遇到失败,状态404 –

+0

@ShashankCool所以URL' “https://开头$ {}子域.zendesk.com/API/V2 /票/ $ {} ticketid以.json”'不是否确定你设置了正确的子域名和ticketid?你确定这是正确的URL吗?尝试打印出来并在浏览器中打印URL ...这是否有效? –

+0

@ShashankCool查看[文档] (http://developer.zendesk.com/documentation/rest_api /tickets.html),我相信URL应该是:'“https:// $ {subdomain} .zendesk.com/api/v2/tickets.json”'不是?更新了答案以反映此... –