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

时间:2013-04-29 07:58:46

标签: java json google-http-client

我正在尝试在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,没问题

1 个答案:

答案 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来完成所有这些工作。