Ank*_*rya 6 java android gson rx-java retrofit2
在我的情况下,当我将子类对象放入改装请求时,它在请求体中变为空白
interface User{ // my super interface
}
class FbUser implements User{ // my sub class
public String name;
public String email;
}
interface APIInterface{
@POST(APIConstants.LOGIN_URL)
Observable<LoginAPIResponse> createUserNew(@Body User user);
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.addCallAdapterFactory(RxErrorHandlingCallAdapterFactory.create())
.client(okHttpClient)
.build();
APIInterface networkAPI = retrofit.create(APIInterface.class);
Run Code Online (Sandbox Code Playgroud)
现在我过世了 FbUserObject
networkAPI.createUserNew(fbUserObject).subscribe();
Run Code Online (Sandbox Code Playgroud)
然后物体在身体上变成空白.看我的日志
D/OkHttp: Content-Type: application/json; charset=UTF-8
D/OkHttp: Content-Length: 2
D/OkHttp: Accept: application/json
D/OkHttp: TT-Mobile-Post: post
D/OkHttp: {}
D/OkHttp: --> END POST (2-byte body)
Run Code Online (Sandbox Code Playgroud)
我也经历了这个stackover流程链接Polymorphism与gson
我应该写自己的Gson转换器吗?
Gson 尝试序列化User没有字段的类。
您需要做的是将类型适配器注册到 gson:
retrofitBuilder.addConverterFactory(GsonConverterFactory.create(new GsonBuilder()
.registerTypeAdapter(User.class, new JsonSerializer<User>() {
@Override
public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) {
if (src instanceof FbUser ) {
return context.serialize(src, FbUser.class);
}
return context.serialize(src);
}
}).create()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |