如何从http ng-builder中提取响应作为json

时间:2019-02-11 08:04:19

标签: httpbuilder httpbuilder-ng

在浏览器中命中URI myresourceUrl会在浏览器中显示json内容。

要求: 需要使用httpbuilder-ng的get方法来调用URI的GET,响应的内容应为json。

此json文件将是另一个任务的输入所必需的。 如何实现这一目标。我们是否需要任何解析器才能使用http-builder-ng将返回的响应作为json获得。

预期的响应格式: {“ name”:“ Abc”,“ info”:{“ age”:45,“ height”:“ 5.5”}}

df = df.loc[df['Quantity'].between(df['Min Q'], df['Max Q']), ['Combined','Quantity','Range']]
print (df)
   Combined  Quantity      Range
0         A         0     0 - 49
5         A        60    50 - 99
9         A        75    50 - 99
14        A       149  100 - 149
25        B       250    0 - 299
30        B       300  300 - 399
36        C        40     5 - 60
39        C        45     5 - 60
43        C        75   50 - 100
46        C        80   50 - 100

实际格式,我们得到: {name:Abc,info:{age:45,height:5.5}}

如何以预期的响应格式获取上述指示的响应。

2 个答案:

答案 0 :(得分:0)

首先,确认您的http请求确实返回了JSON响应。如果是这样,您可以使用gson库。试试

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

答案 1 :(得分:0)

默认情况下,将解析内容类型“ 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;