Как извлечь ответ как JSON из http NG-Builder - PullRequest
0 голосов
/ 11 февраля 2019

URI myresourceUrl при попадании в браузер показывает содержимое json в браузере.

Требование : необходимо использовать метод get httpbuilder-ng для вызова GET URI, и ответ должен иметьсодержимое в формате json.

Этот файл json будет необходим в качестве входных данных для другой задачи.Как этого добиться.Нужен ли какой-либо парсер для получения возвращенного ответа в виде json с использованием http-builder-ng.

Ожидаемый ответ формат: {"name": "Abc", "info": {"age ": 45," height ":" 5.5 "}}

Tried the below get request using:
// setting the request URI 
    HttpBuilder http = HttpBuilder.configure(config -> {
                    config.getRequest().setUri(myresourceUrl);
                });

String response = http.get(LazyMap.class, cfg -> {
                    cfg.getRequest().getUri().setPath(myPath);
                }).toString();

Фактический формат Мы получаем: {name: Abc, info: {age: 45, height: 5.5}}

Как получить ответ, указанный выше, в ожидаемом формате ответа.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

По умолчанию тип содержимого «application / json» будет анализироваться, а не возвращаться как строка.Вам нужно определить собственный анализатор для типа контента.Я собрал пример с использованием поддельного сервера, который возвращает содержимое «application / json», а затем показывает, как вернуть его в виде строки в HttpBuilder-NG:

import com.stehno.ersatz.ErsatzServer;
import groovyx.net.http.HttpBuilder;

import static com.stehno.ersatz.ContentType.APPLICATION_JSON;
import static groovyx.net.http.NativeHandlers.Parsers.textToString;

public class Runner {

    public static void main(final String[] args) {
        final ErsatzServer server = new ErsatzServer();

        server.expectations(expects -> {
            expects.get("/something").responder(response -> {
                response.body("{\"name\":\"Abc\",\"info\":{\"age\":45,\"height\":\"5.5\"}}", APPLICATION_JSON);
            });
        });

        final String response = HttpBuilder.configure(cfg -> {
            cfg.getRequest().setUri(server.getHttpUrl());
            cfg.getResponse().parser("application/json", (chainedHttpConfig, fromServer) -> textToString(chainedHttpConfig, fromServer));
        }).get(String.class, cfg -> {
            cfg.getRequest().getUri().setPath("/something");
        });

        System.out.println(response);
        System.exit(0);
    }
}

Обратите внимание на строку cfg.getResponse().parser("application/json", (chainedHttpConfig, fromServer) -> textToString(chainedHttpConfig, fromServer));, гдепроисходит разбор (переопределяет поведение по умолчанию) - см. также импорт import static groovyx.net.http.NativeHandlers.Parsers.textToString;.

0 голосов
/ 11 февраля 2019

Сначала убедитесь, что ваш http-запрос действительно возвращает JSON-ответ.Если это так, вы можете использовать библиотеку gson .Попробуйте

import com.google.code.gson;
String response = gson.toJSON(http.get(LazyMap.class, cfg -> {
                cfg.getRequest().getUri().setPath(myPath);
            }));
...