Я прочитал this и еще несколько сообщений в SO и других местах о том, как отправлять почтовый вызов через HttpBuilder с JSON в качестве содержимого данных. Моя проблема заключается в том, что НИКАКИЕ ИЗ РЕШЕНИЙ НЕ РАБОТАЮТ!Еще одна проблема при попытке URL-адреса POST JSON REST через HttpBuilder
Моя проблема немного отличается. У меня есть данные JSON в файле. При попытке отправить на интерфейс REST с завитком:
curl -X POST -u "username:password" -d @/path/to/myFile.json http://localhost:8080/path/here --header "Content-Type:application/json"
все работает отлично. Вот где я нахожусь (некоторый дополнительный код IS там, не читайте дальше):
def myFile = new File('/path/to/myFile.json')
if (!myFile.exists()) println "ERROR! Do not have JSON file!"
def convertedText = myFile.text.replaceAll('\\{', '[')
convertedText = convertedText.replaceAll('\\}', ']')
def jsonBldr = new JsonBuilder()
jsonBldr myFile.text
println jsonBldr.toString()
def myClient = new groovyx.net.http.HTTPBuilder('http://username:[email protected]:8080/my/path')
myClient.setHeaders(Accept: 'application/json')
results = myClient.request(POST, JSON) { req ->
body = [ jsonBldr.toString() ]
requestContentType = JSON
response.success = { resp, reader ->
println "SUCCESS! ${resp.statusLine}"
}
response.failure = { resp ->
println "FAILURE! ${resp.properties}"
}
}
Это приводит к 'отказу' закрытие с этими данными:
statusLine:HTTP/1.1 400 Exception evaluating property 'id' for java.util.ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: id for class: java.lang.String
FWIW, нет " id "в моем JSON где угодно. Если я изменил строку «body» с «[jsonBldr.toString()]» на «[convertText]» - вот почему этот код там, я получаю ту же ошибку. Если я вытащу скобки на теле, я получаю сообщение об ошибке, указывающее, что тело не является данными для массива (как его Карта).
Может ли кто-нибудь (гораздо более крупный, чем я) сказать мне, что такое %% $ # @ Я делаю неправильно ???
СПАСИБО !!! Не знаю почему, но мне пришлось изменить «requestContextType» с JSON на «URLENC», но теперь это работает! – JoeG
Отдельно, документ (http://groovy.codehaus.org/gapi/index.html?groovy/json/JsonBuilder.html) для метода JsonBuilder.toString гласит: «Сериализовать внутреннюю структуру данных, построенную с помощью построителя, до совместимая строка полезной нагрузки JSON ", поэтому, хотя мне очень нравится groovy, я все еще чувствую, что я нахожусь снаружи, пытаясь войти! Другими словами, учитывая этот документ, как я должен был знать и/или узнать, как сделать эту работу? Извините - вне темы, просто нужно напыщенно! – JoeG
@joeg это было своеобразное объяснение. Мы не «строим» json, а читаем один (slurper). Вы обязательно убедитесь в этом. :) – dmahapatro