我正在尝试使用here
中的AutoValue库我使用Retrofit 2.0进行Web服务调用,所有Web服务请求都因HTTP请求错误400而失败。通过进一步调查我知道我必须设置TypeAdapterFactory
并将其传递给Retrofit Builder
Retrofit retrofit = new Retrofit
.Builder()
.addConverterFactory(gsonConverterFactory)
.baseUrl("http://url.com/")
.build()
此答案可在How to use AutoValue with Retrofit 2?
处找到但是那里使用的gsonConverterFactory
就像
public class AutoValueGsonTypeAdapterFactory implements TypeAdapterFactory {
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
Class<? super T> rawType = type.getRawType();
if (rawType.equals(SignIn.class)) {
return (TypeAdapter<T>) SignIn.typeAdapter(gson);
}
return null;
}
}
正在使用rawType.equals(SignIn.class)
,所以我的问题是,有没有办法制作AutoValueGsonTypeAdapterFactory
的通用版本,或者我必须为每个网络服务请求创建单独的AutoValueGsonTypeAdapterFactory
DTO ??
提前致谢
答案 0 :(得分:0)
为您的所有auto-value-gson生成TypeAdapterFactory 类,只需创建一个实现的抽象类 TypeAdapterFactory并使用@GsonTypeAdapterFactory注释它,和 auto-value-gson将为您创建一个实现。你只需要 提供静态工厂方法,就像你的AutoValue类一样, 并且您可以使用生成的TypeAdapterFactory来帮助Gson de /序列化您的类型。
from gson extension documentation
创建以下工厂方法来处理
@GsonTypeAdapterFactory
public abstract class MyAdapterFactory implements TypeAdapterFactory {
// Static factory method to access the package
// private generated implementation
public static TypeAdapterFactory create() {
return new AutoValueGson_MyAdapterFactory();
}
}
注册工厂实例:
GsonConverterFactory gsonConverterFactory = GsonConverterFactory.create(
new GsonBuilder()
.registerTypeAdapterFactory(AutoValueGsonTypeAdapterFactory.create())
.create());
然后将其添加到retrofitclient
Retrofit retrofitClient = new Retrofit.Builder()
.baseUrl(BuildConfig.END_POINT)
.addConverterFactory(gsonConverterFactory)
.client(okHttpClient.build())
.build();