Как извлечь ответ как 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;
,