-
Notifications
You must be signed in to change notification settings - Fork 36
Description
I make custom converter factory for Jackson-jr parser.
Jackson-jr itself is good for mobile devices due to resource requirements during startup and usage is quite low.
https://github.com/FasterXML/jackson-jr
And after a long experiment, Converter Factory for Jackson-jr was successfully run.
I use generic class or object T that needed for Jackson-jr for JSON Parsing.
Here's the snippet
public class JacksonJrConverters<T> extends Converter.Factory {
private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
protected static final String PROTOCOL_CHARSET = "utf-8";
private Class<T> clazz;
public JacksonJrConverters(Class<T> tClass) {
super();
this.clazz = tClass;
}
@Override
public Converter<ResponseBody, ?> fromResponseBody(Type type, Annotation[] annotations) {
super.fromResponseBody(type, annotations);
if (clazz.equals(type)) {
return new Converter<ResponseBody, T>() {
@Override
public T convert(ResponseBody value) throws IOException {
return JSON.std.beanFrom(clazz, value.bytes());
}
};
}
return null;
}
@Override
public Converter<?, RequestBody> toRequestBody(Type type, Annotation[] annotations) {
super.toRequestBody(type, annotations);
if (clazz.equals(type)) {
return new Converter<T, RequestBody>() {
@Override
public RequestBody convert(T value) throws IOException {
String strs = JSON.std.asString(value);
return RequestBody.create(MEDIA_TYPE, strs.getBytes(PROTOCOL_CHARSET));
}
};
}
return null;
}
}Or you can look it in here :
https://gist.github.com/GulajavaMinistudio/67959246f6d94e373d4c
And for Rest Client instance :
public class RestClientsJackson<T> {
//use class T as generic for Jackson Jr parsing reference
private Class<T> mClass;
private OkHttpClient mOkHttpClient;
public static final String ALAMAT_SERVERS = "https://api.github.com";
public RestClientsJackson(Class<T> aClass) {
mClass = aClass;
mOkHttpClient = new OkHttpClient();
mOkHttpClient.setConnectTimeout(10, TimeUnit.SECONDS);
mOkHttpClient.setWriteTimeout(15, TimeUnit.SECONDS);
mOkHttpClient.setReadTimeout(20, TimeUnit.SECONDS);
}
//with jackson jr converter
public Apis getApiServicesJackson() {
Log.w("API NULL", "API NULL, INIT LAGI");
Retrofit.Builder retrobuilder = new Retrofit.Builder();
retrobuilder.baseUrl(ALAMAT_SERVERS);
retrobuilder.client(mOkHttpClient);
retrobuilder.addConverterFactory(new JacksonJrConverters<>(mClass));
Retrofit retrofits = retrobuilder.build();
return retrofits.create(Apis.class);
}
}Or you can see it here
https://gist.github.com/GulajavaMinistudio/b853e01ee2ef4fb2213a
If you want to testing, i have made sample project for how to usage it :
https://github.com/GulajavaMinistudio/BelajarRetrofitJacksonJr
Hope it can help for someone that need Jackson-jr converter in Retrofit 2.