Получение необработанной строки json или клиента Jackson Mapper из запроса httpbuilder-ng get

Я обновляю отличные скрипты с 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
        }
    }

0 ответов

Другие вопросы по тегам