Grails 意外错误400:错误的请求HttpBuilder POST请求

Grails 意外错误400:错误的请求HttpBuilder POST请求,grails,groovy,httpbuilder,Grails,Groovy,Httpbuilder,我使用以下代码将JSON对象发布到URL groovy: def http = new HTTPBuilder( 'myURL' ) // perform a POST request, expecting JSON response data http.request( POST, JSON ) { uri.path = myPath uri.query = [ service_key:'1.0', event_type: 'trigger' ] headers.'Content-Type'

我使用以下代码将JSON对象发布到URL groovy:

def http = new HTTPBuilder( 'myURL' )

// perform a POST request, expecting JSON response data
http.request( POST, JSON ) {
uri.path = myPath
uri.query = [ service_key:'1.0', event_type: 'trigger' ]
headers.'Content-Type' = 'application/json'

// response handler for a success response code:
response.success = { resp, json ->
println resp.status

// parse the JSON response object:
 json.responseData.results.each {
 ret = json.getText()
 println 'Response data: -----'
 println ret
 println '--------------------'
}
}

// handler for any failure status code:
response.failure = { resp ->
println "Unexpected error: ${resp.status} : ${resp.statusLine.reasonPhrase}"
}
}

  Ajax Code that works:(EDITED)
 $.ajax({       url:'https://events.pagerduty.com/generic/2010-04-15/create_event.json',                                                                       
            type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({

              service_key: "1379ca7018e94343bf5fa5add9fa42eb",
                 incident_key: "srv01/HTTP",
                event_type: "trigger",
                description: "TEst Test"
     }),
     dataType:'json'
     });
     alert('Message Sent');
每次我都会遇到意外错误:400:请求错误,如果我使用$.ajax()执行此操作,情况也是一样。我得到HTTP:200的响应。这里出了什么问题


谢谢。

如果您可以访问请求数据的服务器,请查看日志文件

错误的请求通常意味着Web服务器不喜欢您的URL、查询字符串或HTTP头。如果你能进入服务器,你可能会得到更多的细节

否则,在执行HTTP post之前,是否有一种方法可以记录请求对象


另外--再次检查JSON数据的格式是否正确。在某些框架中,我需要在将JSON发送到请求对象之前对其进行转义。还可以尝试将其记录下来,看看您的框架是否需要您处理(甚至可能
将数据解析到字典/关联数组类型结构中)

在ajax示例中,您将4个元素作为JSON主体传递,结果如下:

{"service_key": "1379ca7018e94343bf5fa5add9fa42eb",
 "incident_key": "srv01/HTTP",
 "event_type": "trigger",
 "description": "TEst Test"}
但是在groovy示例中,您只传递了两个查询字符串参数(将在uri上传递)

你也许应该换个新的

uri.query = [ service_key:'1.0', event_type: 'trigger' ]
与:


您还应该在故障响应处理程序中输出响应数据,因为许多服务都会向您说明不符合服务合同的原因。

400错误请求是来自服务器的响应。在不知道您实际调用的是什么服务的情况下,很难知道出了什么问题……您可以添加有效的$.ajax()代码吗……编辑我的帖子以添加ajax数据您需要在这行
http.request(post,JSON)中对数据进行字符串化吗
或者它已经是一种合适的格式了?它已经是一种格式了。将body而不是uri.query放在我的HTTP:200中。。非常感谢。
body =  [service_key:'1.0', incident_key: "srv01/HTTP", event_type: 'trigger' description: "TEst Test"]