我正在尝试使用 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) {}
});
最佳答案
这是因为 GSON 尝试使用反射基于字段序列化您的对象,但 Realm 实例数据只能通过代理 getter setter 方法访问。
请参阅相关未决问题,因为 GSON 并不真正关心,因此没有配置来改为使用 getters/setters https://github.com/google/gson/issues/232
这可以通过 Jackson 或 LoganSquare json 解析器实现。
或者,您需要制作 RealmObject 的非托管副本,这可以使用 realmObject.copyFromRealm()
来完成,它会创建您的类的深拷贝,与 Realm 分离。
关于android - 将 Realm 对象作为 Retrofit 2 PUT 请求主体传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38476940/