使用Groovy'更新JSON数据;使用PUT的HTTP生成器

使用Groovy'更新JSON数据;使用PUT的HTTP生成器,groovy,zendesk,groovy-console,groovyws,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

我需要使用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;
    }
}   

但是车票没有更新。是否有任何类型的执行方法。请告诉我哪里出了问题。

试试这个,你需要设置你的
子域
ticketid
用户
通行证
(我也删除了所有不必要的导入):


尝试此操作,您需要设置您的
子域
ticketid
用户
通行证
(我还删除了所有不必要的导入):


有错误吗?json是什么样子的?可以吗?很难看到发生了什么,代码有点混乱:-(@tim_yates:最初我正在构建JSON并通过body发送它。没有错误。它的格式是{“ticket”:[{“subject”:“xyz”}}。但该值未被更新。如果我将内容类型用作URLENC,则会出现以下错误ava.lang.NullPointerException:无法在null对象上获取属性“subject”任何错误?json是什么样子的?可以吗?很难看到发生了什么,代码有点混乱:-(@tim_yates:最初我正在构建JSON并通过body发送它。没有错误。它的格式是{“ticket”:[{“subject”:“xyz”}]}。但未更新该值。如果我将内容类型用作URLENC,则会出现以下错误ava.lang.NullPointerException:无法获取null object上的属性“subject”。我执行了以下代码,但遇到以下错误请求,状态为“失败”404@ShashankCool因此URL
“https://${subdomain}.zendesk.com/api/v2/tickets/${ticketid}.json“
不存在。你确定你正确设置了子域和ticketid吗?你确定那是正确的URL吗?试着打印出来,然后在浏览器中转到打印的URL…这样行吗?@ShashankCool看着,我相信URL应该是:
“https://${subdomain}.zendesk.com/api/v2/tickets.json“
no?更新了答案以反映这一点…@ShashankCool这更接近…内部服务器错误。您是否尝试了新的body
body=[ticket:[subject:'xyz']]
(我相信从文档中可以看出这一点)?@ShashankCool!最终达到了;-)玩得开心!我执行了以下代码,但遇到以下错误请求失败,状态为404@ShashankCool因此URL
“https://${subdomain}.zendesk.com/api/v2/tickets/${ticketid}.json”
不存在。你确定你正确设置了子域和ticketid吗?你确定这是正确的URL吗?试着打印出来,然后在浏览器中转到打印的URL…这样行吗?@ShashankCool看着,我相信URL应该是:
“https://${subdomain}.zendesk.com/api/v2/tickets.json”
no?更新了答案以反映这一点…@ShashankCool这更接近了…内部服务器错误。您是否尝试了新的正文
body=[票证:[主题:'xyz']]
(我相信从文档中可以看出这一点)?@ShashankCool!最终达到目的;-)玩得开心!
@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}"
    }
}