我正在尝试在 android 上使用 google-http-java-client 并解析来 self 的服务器的 JSON 响应。 do do that 我正在使用以下代码(由项目示例提供)
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 字符串中的数据更新一个现有对象。 只有 jackson 我可以使用下面的代码但是谷歌客户端我找不到任何解决方案。
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,没问题
最佳答案
这取决于接收 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它为您完成所有这些工作。
关于java - google-http-java-client json 更新现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273798/