我正在尝试在Android上使用google-http-java-client并解析来自我服务器的JSON响应。 我这样做我使用下面的代码(由项目的例子提供)
private static final HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
HttpRequestFactory requestFactory = HTTP_TRANSPORT
.createRequestFactory(new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) {
request.setParser(new JsonObjectParser(JSON_FACTORY));
}
});
HttpRequest request = requestFactory.buildGetRequest(new GenericUrl(url + paramsList));
HttpResponse response = request.execute();
并且一切都适用于
的新对象result = response.parseAs(PxUser.class);
但我需要使用json字符串中的数据更新现有对象。 只有杰克逊我可以使用以下代码,但谷歌客户端我找不到任何解决方案。
InputStream in = -get-http-reponse-
ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.readerForUpdating(MySingleton.getInstance());
reader.readValue(InputStream in);
所以我需要一种更新现有对象的方法,就像使用这个jackson示例一样,但是使用客户端。
有办法吗?我必须使用jackson-databind.jar吗?我怎么能做到这一点? 提前谢谢
PS:如果需要,我可以切换到gson,没问题
答案 0 :(得分:0)
这取决于接收API调用的任何端点,以及它希望请求看起来像什么。
Google HTTP Java客户端只需处理诸如进行调用,编码和解码对象,指数退避等过程。由您来创建满足您需求的请求以及服务器期望它的外观。
可能,您正在请求API以期望使用PUT请求进行对象更新。更新的对象可能是请求的内容,以某种特定格式编码。让我们假设JSON,因为您正在解析JSON响应。因此,出于示例的目的,假设您要请求对象,修改它,然后将其发回。
首先,获取资源并将其解析到对象中:
PxUser myUser = response.parseAs(PxUser.class);
然后以某种方式修改对象
myUser.setName("Frodo Baggins");
现在,您希望将其作为PUT请求中的JSON对象发送回服务器:
// httpbin.org is a wonderful URL to test API calls against as it returns whatever if received.
GenericUrl url = new GenericUrl("http://httpbin.org/put");
JsonHttpContent content = new JsonHttpContent(new JacksonFactory(), myUser);
HttpRequest request = requestFactory.buildPutRequest(url, content);
HttpResponse response = request.execute();
System.out.println(response.parseAsString());
您编码和更新内容的具体细节完全取决于您和API的规范。如果您正在创建接收呼叫的服务器,这将特别容易。
如果您正在使用预先存在的API,则可能需要使用以下内容更新问题 特定问题(API“x”需要看起来像Blah的响应;我如何在google-http-java-client中执行此操作。)
如果您正在使用Google API,则需要使用google-api-java-client来完成所有这些工作。