2016-11-08 5 views
0

私はJSONを受け入れ、JSON文字列をPOJOに変換するためにGSONを使用するWebサービスを持っています。GSONが通常のStringプロパティをAtomicReferenceとして扱う方法<String>?

POJO例:

class POJO{ 
    AtomicReference<String> property;  
} 

JSON文字列例:

{ "プロパティ": "ヴァル"}

JSONストリングがGSONによって解析されますが、それJSON文字列が次のようになるため、JSONSyntaxExceptionがスローされます。

{「プロパティ」:{「値」:「ヴァル」}}

私はちょうど非同時変数をPOJO(POJO2)の対応を記述して、私のPOJO(POJO1)を初期化する必要がありますかPOJO2値を使用して並行変数を使用するか?または、AtomicReference変数を文字列として扱うGSONを作成する方法はありますか?

私が前者を実行した場合、GSONの機能を利用してjsonストリングからその場でオブジェクトを出力します。

+0

また、AtomicReferenceのフィールドにPOJOを書く必要があります。 – Onkar

+0

どういう意味ですか? – Jin

答えて

0

私は再びGoogleに相談し、TypeAdaptersを作成するthis answerが見つかりました。だから、自分のタイプのアダプターを巻きました。私はPOJOクラスのAtomicLongのような他のAtomicオブジェクトも使用しています。

class AtomicStringTypeAdapter extends TypeAdapter<AtomicReference<String>> { 

    @Override 
    public AtomicReference<String> read(JsonReader in) throws IOException { 

     AtomicReference<String> value = null; 

     JsonParser jsonParser = new JsonParser(); 
     JsonElement je = jsonParser.parse(in); 

     if (je instanceof JsonPrimitive) { 
      value = new AtomicReference<String>(); 
      value.set(((JsonPrimitive) je).getAsString()); 
     } else if (je instanceof JsonObject) { 
      JsonObject jsonObject = (JsonObject) je; 
      value = new AtomicReference<String>(); 
      value.set(jsonObject.get("value").getAsString()); 
     } 

     return value; 
    } 

    @Override 
    public void write(JsonWriter out, AtomicReference<String> value) throws IOException { 
     if (value != null) { 
       out.beginObject(); 
       out.name("value").value(value.get()); 
       out.endObject(); 
     } 
    } 
} 
関連する問題