Google-http-java-client json更新现有对象



我试图在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字符串的数据。对于Jackson,我只能使用以下代码,但对于Google客户端,我找不到任何解决方案。

InputStream in = -get-http-reponse-
ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.readerForUpdating(MySingleton.getInstance());
reader.readValue(InputStream in);

所以我需要一种方法来更新一个现有的对象,就像这个杰克逊的例子,但通过使用客户端。

有办法吗?我必须使用jackson- databbind .jar吗?我怎样才能做到这一点呢?提前感谢

如果需要的话,我可以切换到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来为您完成所有这些工作。

最新更新