【问题标题】:google-http-java-client json update existing objectgoogle-http-java-client json 更新现有对象
【发布时间】:2013-04-22 19:59:38
【问题描述】:

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

【问题讨论】:

  • 您可能希望将其标记为 java 以提高可见性

标签: java json google-http-client


【解决方案1】:

这取决于接收 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,它会为您完成所有这些工作。

【讨论】:

  • 嘿,谢谢你的回答,但我认为你弄错了。我不是要更新服务器上的对象-我想解析对应用程序中现有对象的响应。 1. 用一些数据创建 java 对象 2. GET 请求到服务器 3. 用附加数据解析 JSON 响应到我现有的 java 对象中
  • 抱歉,我好像误会了你。您正在修改现有的 Java 对象,而不是服务器上的资源?我认为该用例尚未明确处理,但您可以扩展低级 JSON 解析器来为您执行此操作。
  • 嗨,我怎样才能得到 JacksonFactory() 对象?
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多