これは、URL 短縮サービスに関する別の質問に関連しています。URL Shorter のコードは、スタンドアロンの Java と Android の両方で正常に動作します。ただし、このコードを再利用してカスタム Google App Engine アプリケーションと通信する場合、コードはスタンドアロン Java では問題なく動作しますが、Android から使用すると空の self.request.body が生成されます。なんで?
この動作を再現するには、以下のコードを Android で実行します。1 回は Google 短縮 URL:
https://www.googleapis.com/urlshortener/v1/url
を使用し、もう 1 回は Web サーバーへのカスタム URL を使用します。スタンドアロンの Java で同じコードを実行すると、どちらの場合も (予想どおり) まったく同じ要求が生成されます。Android では、カスタム URL の場合、コンテンツの本文が空であり、コンテンツの長さが設定されていません。ジャクソン 1.7.1 で google-api-java-client 1.2.2-alpha を実行しています。
コード スニペット:
HttpTransport transport = GoogleTransport.create();
HttpRequest request = transport.buildPostRequest();
// Change this URL below from Google Shortener URL, to a custom URL,
// and the code on Android produces an empty body and Content-Length is not set
request.setUrl("GoogleAppEngine url goes here");
JsonCContent content = new JsonCContent();
GenericData data = new GenericData();
data.put("id", "whatever");
content.data = data;
request.content = content;
HttpResponse response = request.execute();