我正在使用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操作。
由于
答案 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了解详情。