使用Google Http Client在GET请求中将对象作为参数传递

时间:2012-11-09 03:23:56

标签: json http httpclient jackson

我正在使用Google Http Client和Jackson查询数据到后端(JSON API)。

我需要传递参数(一个Java bean对象)。该对象可能只有很少或很多字段。最初我尝试将其作为内容传递如下:

HttpRequest request = requestFactory.buildGetRequest(getUrl(api)).setContent(new JsonCContent(jsonFactory, params));

但是,我不允许在GET操作中设置HTTP内容。

有任何建议我如何传递这些参数?

在一个条件下: 我不想编写一个util方法将此对象转换为URL参数字符串。但是,如果已经有可重复使用的API,那就没关系了。

如果可能,我需要通用解决方案。因为我将把它应用于600个JSON API调用。

我的最后一个选择是将后端更改为期望POST请求而不是GET,然后我在客户端执行POST操作。

由于

2 个答案:

答案 0 :(得分:3)

您可以使用GenericUrl.put(继承自GenericData)来设置查询参数,而不是扩展GenericUrl。例如:

GenericUrl genericUrl = new GenericUrl("http://yourapi.com/request");
genericUrl.put("user", "user name");
genericUrl.put("token", "token values");
HttpRequest request = requestFactory.buildGetRequest(genericUrl);

答案 1 :(得分:0)

似乎预期的用法是扩展您用于buildGetRequest()调用的网址类。例如,假设您想提供两个名为“user”和“token”的额外查询参数。您可以使用以下内容执行此操作:

HttpRequest request = requestFactory.buildGetRequest(
    new CustomUrl("http://www.yourserver.com").setUser(userId).setToken(token));

其中CustomUrl类定义为:

public class CustomUrl extends GenericUrl {
    public CustomUrl(String encodedUrl) {
        super(encodedUrl);
    }

    @Key("user")
    private String mUserId;

    @Key("token")
    private String mToken;

    public CustomUrl setUser(String userId) {
        mUserId = userId;
        return this;
    }

    public CustomUrl setToken(String token) {
        mToken = token;
        return this;
    }
}

@Key注释不需要这些值,但如果提供的话,它们将用作相应查询参数的名称。如果省略,将改为使用变量的名称(see example

查看google-http-client's javadoc了解详情。