2

我正在尝试在 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-databind.jar 吗?我怎样才能做到这一点?提前致谢

PS:如果需要我可以切换到gson,没问题

4

1 回答 1

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

于 2013-04-29T20:53:03.063 回答