我正在尝试使用RealmObject作为Retrofit 2中的PUT消息正文内容。我已经使用JsonSerializer实现了自定义Gson,它在Retrofit之外工作正常,但我仍然没有在请求体中获取对象数据。
用于改造和gson的Gradle构建:
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
改造服务:
public interface LogstashRetrofitService {
@PUT(LOGSTASH_SERVER_PATH)
Call<ResponseBody> putLogstashMessage(@Body LogstashMessage logstashMessage);
}
建筑改造:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(LOGSTASH_SERVER_HOST)
.addConverterFactory(GsonConverterFactory.create(RealmObjectGsonBuilder.getRealmGson()))
.client(httpClient.build())
.build();
logstashRetrofitService = retrofit.create(LogstashRetrofitService.class);
logstashRetrofitService.putLogstashMessage(logstashMessage).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {}
});
答案 0 :(得分:4)
这是因为GSON尝试使用反射基于字段序列化对象,但Realm实例数据只能通过代理getter setter方法访问。
请参阅相关的未解决问题,因为GSON并不关心,因此没有配置来使用getter / setters https://github.com/google/gson/issues/232
这可以使用Jackson或LoganSquare json解析器。
或者,您需要制作RealmObject的非托管副本,可以使用realmObject.copyFromRealm()
来创建类的深层副本,与Realm分离。