2014-01-21 2 views
1

У меня есть требование по обновлению билетов Zendesk с использованием Groovy HTTP Builder. Я использую следующий код:Обновление данных JSON с помощью HTTP Builder Groovy с использованием 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 и отправляю его через тело. Нет ошибок. Он находится в форме {"ticket": [{"subject ":" xyz "}]} Но значение не обновляется. –

+0

Если я использую тип содержимого как URLENC, я получаю следующую ошибку ava.lang.NullPointerException: Не удается получить объект« объект »на нулевом объекте –

ответ

3

Попробуйте это, вам нужно настроить subdomain, ticketid, user и pass (я удалил все ненужные импорта, а):

@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: // $ {subdomain} .zendesk.com/api/v2/tickets/$ {ticketid} .json "' не Вы уверены, что правильно настроили субдомен и билет? Вы уверены, что это правильный URL? Попробуйте распечатать его и перейти к напечатанному URL-адресу в браузере ... Это работает? –

+0

@ShashankCool Глядя на [документацию] (http://developer.zendesk.com/documentation/rest_api /tickets.html), я считаю, что URL-адрес должен быть следующим: '" https: // $ {subdomain} .zendesk.com/api/v2/tickets.json "' no? Обновлен ответ, чтобы отразить это ... –