Получение необработанной строки json или клиента Jackson Mapper из запроса httpbuilder-ng get - PullRequest
0 голосов
/ 30 января 2019

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