1

目的:Googleエンドポイント内で@JsonStringアノテーションを使用するJavaオブジェクトからJSON文字列を生成します。@JsonStringアノテーションを使用してGoogleエンドポイントでJSONを生成

戦略:

public class MyBean { 
    @JsonString private Long id; 
... 

String practicaJson = new Gson.toJson(myBean); 

期待される結果:

{"id":"5658091668373504",... 

実際の結果:

{"id":5658091668373504,... 

コンテキスト: は私がAndroidアプリとGoogleクラウドエンドポイントを持っています。 Beanは、エンドポイントのhttpインターフェイスを介してエンドポイントからAndroidクライアントに送信されます。さて、私はFirebase通知でBeanを送信しようとしています。だから、私は自分のjson文字列を生成する必要があります。

Googleのエンドポイントモジュール内のBeanは、私が書いたプレーンなJavaクラスです。 Androidクライアントは、GoogleエンドポイントライブラリからそのBeanの生成バージョンを受け取ります。その生成されたBeanには@JsonStringアノテーションがあります。 (私が気にかけていないJavaScriptの互換性の問題のため、Googleのエンドポイントライブラリはこれを行います)。

エンドポイントのサイドBeanで生成されたjsonは、AndroidクライアントのBeanと互換性がありません。簡単な解決策は、エンドポイントBeanに@JsonStringアノテーションを追加するだけだったようです。しかし、Gsonは@JsonStringアノテーションを無視しているようです。

JSONの問題を解決するためのヒントは歓迎します。同じBean/pojoをHTTPトランスポート経由で、時にはFirebase通知メッセージ経由で送るよりスマートな方法があれば、それも聞いてみたいと思います。

答えて

0

あなたが必要な場合:

{"id":"5658091668373504",... 

あなたがIDを自動生成するためにUUIDランダムを使用することができますオブジェクトを作成するときは、文字列

@JsonString private String id; 

にロング変更する必要があります。

+0

フィールドをLongからStringに変更したくありません。私はコードのLong型について気にします。私はそれが転送中にどのように見えるか気にしない。 @JsonStringアノテーションはそれを処理する必要があります(またはクライアントとサーバーで対称的に処理しないでください)。 IDはObjectifyによって生成されます。 –