Как извлечь ответ как JSON из http-нг-строитель

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();

Фактический формат мы получаем: {имя:Abc, информация: {возраст: 45, рост: 5,5}}

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

2 ответа

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

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

По умолчанию тип содержимого "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;,

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