Я обновляю скрипты Groovy с httpbuilder до httpbuilder-ng .Эти скрипты взаимодействуют с различными веб-сервисами для получения сообщений.Я пытаюсь разобрать ответы, предпочтительно используя Джексона в объекты.Однако я не могу получить сырой ответ json, как в httpbuilder, так как httpbuilder-ng во всех случаях автоматически разбирает lazymap.
Старая реализация, использующая httpbuilder, позволяла вам использовать body.textметод, чтобы получить необработанную строку json без разбора на lazymap.Затем он может быть использован с ObjectMapper в Джексоне для создания моих POJO.Однако httpbuilder-ng, похоже, не поддерживает это.
Я уже пробовал метод получения необработанного json, но метод body.text не работает в версии 1.03, которую я использую http://coffeaelectronica.com/blog/2016/httpbuilder-ng-demo.html.
У меня также естьпопытался добавить мои собственные пользовательские кодеры, чтобы переопределить создание JSON-объектов Groovy по умолчанию, но безуспешно.Предположительно это возможно, как подробно описано в вики https://http -builder-ng.github.io / http-builder-ng / asciidoc / html5 / .Если у кого-то есть фрагмент кода того, как это сделать, это будет оценено!
Старый код httpbuilder:
def http = new HTTPBuilder("http://${proxy}.domain.ie")
http.request(GET, TEXT) {
uri.path = "/blah/plugins/blah/queues"
headers.Accept = 'application/json'
headers.'Cookie' = "token=${token}"
response.success = { resp, json ->
assert resp.status < 300
LOGGER.info("GET queues request succeeded, HTTP " + resp.status)
ObjectMapper objectMapper = new ObjectMapper()
queues = objectMapper.readValue(json, Queue[].class)
}
response.failure = { resp ->
assert resp.status >= 300
LOGGER.info("GET queues request failed, HTTP " + resp.status)
return null
}
}
новый код http-builder-ng:
def http = configure {
request.uri = "http://${proxy}.domain.ie"
request.headers["Accept"] = "application/json"
request.headers["Cookie"] = "token=${token}"
request.contentType = TEXT
}
return http.get {
request.uri.path = "/blah/plugins/blah/queues"
response.success { FromServer fs, Object body ->
return body.text // doesn't work
}
response.failure {
return null
}
}
Обновление
Найденорешение.Он должен был добавить пользовательский анализатор и закрытие, используя метод FromServer.inputstream.text.
def text = httpBuilder.get {
request.uri.path = '/blah/plugins/blah/queues'
response.parser('application/json') { ChainedHttpConfig cfg, FromServer fs ->
String text = fs.inputStream.text
}
}