0

我正在使用 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 操作。

谢谢

4

2 回答 2

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);
于 2015-09-01T05:17:36.010 回答
0

似乎预期的用途是扩展您用于buildGetRequest()呼叫的 URL 类。例如,假设您想提供两个额外的查询参数,称为“用户”和“令牌”。您可以使用以下方法执行此操作:

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注释不是必需的,但如果提供,将用作相应查询参数的名称。如果省略,将使用变量的名称(参见示例

查看google-http-client 的 javadoc了解更多信息。

于 2012-12-05T01:16:07.877 回答