2014-01-21 39 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」'不是?更新了答案以反映此... –