2016-06-29 4 views
1

私は、AndroidアプリケーションでRetrofit 2.1とJacksonを使用して、ジャクソンを使用してデシリアライズするサービスへのポストコールを行っています。生成されたばかりだし、サービスに送信されたJSONがあるしかしJacksonのレトロフィット要求に注釈を挿入する

{"@class":"com.servicepackagepath$OurClassName","prop1":"value1","prop2":"value2"} 

500に換装署名を結果
{"prop1":"value1","prop2":"value2"} 

は、次のようになります。サービスが見えるように入ってくるJSONを期待しています

@POST("apiName") 
Call<String> apiName(@Body OurClassName ourClassName); 

クライアント側のOurClassNameクラスは、サービス上のものとは異なるクラスです。まったく同じ署名ですが、ローカルです。

@class注釈を発信jsonに挿入するにはどうすればよいですか?

+0

私はそれがその後、Aを追加し、注釈を挿入し、カスタムJSONオブジェクトを作成することによって、作業ましたgsonはオブジェクトのjson表現にデシリアライズし、jsonオブジェクトをサービスに渡します。それは動作しますが、それはトータルのハックであり、改造がどのように使用されるべきではないので、私はそれに対して答えを作成しません。適切な方法は何ですか? – Nullqwerty

答えて

0

わかりました。あなたはレトロフィット・ビルダーに追加する必要があります。

.addConverterFactory(JacksonConverterFactory.create(
    new ObjectMapper().enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, JsonTypeInfo.As.PROPERTY) 
)) 

、その後、あなたのクラス宣言の上には、実行します。

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include= JsonTypeInfo.As.PROPERTY, property="@class") 
関連する問題