[Kotlin][#7925] Make ApiClient in jvm-retrofit2 be able to add additional retrofit Converter.Factory (#9316)

* [Kotlin][#7925] Add an optional Converter.Factory to the Kotlin retrofit2 ApiClient template.

* [Kotlin][#7925] Update sample project.
This commit is contained in:
Stefan Hanselmann 2021-04-22 13:07:55 +02:00 committed by GitHub
parent 05f329959c
commit 5468b22b83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 4 deletions

View File

@ -25,6 +25,7 @@ import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import retrofit2.Retrofit import retrofit2.Retrofit
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Converter
import retrofit2.converter.scalars.ScalarsConverterFactory import retrofit2.converter.scalars.ScalarsConverterFactory
{{#useRxJava}} {{#useRxJava}}
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
@ -55,7 +56,8 @@ import okhttp3.MediaType.Companion.toMediaType
private var baseUrl: String = defaultBasePath, private var baseUrl: String = defaultBasePath,
private val okHttpClientBuilder: OkHttpClient.Builder? = null{{^kotlinx_serialization}}, private val okHttpClientBuilder: OkHttpClient.Builder? = null{{^kotlinx_serialization}},
private val serializerBuilder: {{#gson}}Gson{{/gson}}{{#moshi}}Moshi.{{/moshi}}Builder = Serializer.{{#gson}}gson{{/gson}}{{#moshi}}moshi{{/moshi}}Builder{{/kotlinx_serialization}}, private val serializerBuilder: {{#gson}}Gson{{/gson}}{{#moshi}}Moshi.{{/moshi}}Builder = Serializer.{{#gson}}gson{{/gson}}{{#moshi}}moshi{{/moshi}}Builder{{/kotlinx_serialization}},
private val okHttpClient : OkHttpClient? = null private val okHttpClient : OkHttpClient? = null,
private val converterFactory: Converter.Factory? = null,
) { ) {
private val apiAuthorizations = mutableMapOf<String, Interceptor>() private val apiAuthorizations = mutableMapOf<String, Interceptor>()
var logger: ((String) -> Unit)? = null var logger: ((String) -> Unit)? = null
@ -81,6 +83,11 @@ import okhttp3.MediaType.Companion.toMediaType
{{#kotlinx_serialization}} {{#kotlinx_serialization}}
.addConverterFactory(jvmJson.asConverterFactory("application/json".toMediaType())) .addConverterFactory(jvmJson.asConverterFactory("application/json".toMediaType()))
{{/kotlinx_serialization}} {{/kotlinx_serialization}}
.apply {
if (converterFactory != null) {
addConverterFactory(converterFactory)
}
}
} }
private val clientBuilder: OkHttpClient.Builder by lazy { private val clientBuilder: OkHttpClient.Builder by lazy {

View File

@ -11,6 +11,7 @@ import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import retrofit2.Retrofit import retrofit2.Retrofit
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Converter
import retrofit2.converter.scalars.ScalarsConverterFactory import retrofit2.converter.scalars.ScalarsConverterFactory
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
@ -20,7 +21,8 @@ import okhttp3.MediaType.Companion.toMediaType
class ApiClient( class ApiClient(
private var baseUrl: String = defaultBasePath, private var baseUrl: String = defaultBasePath,
private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val okHttpClientBuilder: OkHttpClient.Builder? = null,
private val okHttpClient : OkHttpClient? = null private val okHttpClient : OkHttpClient? = null,
private val converterFactory: Converter.Factory? = null,
) { ) {
private val apiAuthorizations = mutableMapOf<String, Interceptor>() private val apiAuthorizations = mutableMapOf<String, Interceptor>()
var logger: ((String) -> Unit)? = null var logger: ((String) -> Unit)? = null
@ -30,6 +32,11 @@ class ApiClient(
.baseUrl(baseUrl) .baseUrl(baseUrl)
.addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(jvmJson.asConverterFactory("application/json".toMediaType())) .addConverterFactory(jvmJson.asConverterFactory("application/json".toMediaType()))
.apply {
if (converterFactory != null) {
addConverterFactory(converterFactory)
}
}
} }
private val clientBuilder: OkHttpClient.Builder by lazy { private val clientBuilder: OkHttpClient.Builder by lazy {

View File

@ -11,6 +11,7 @@ import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import retrofit2.Retrofit import retrofit2.Retrofit
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Converter
import retrofit2.converter.scalars.ScalarsConverterFactory import retrofit2.converter.scalars.ScalarsConverterFactory
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import com.squareup.moshi.Moshi import com.squareup.moshi.Moshi
@ -21,7 +22,8 @@ class ApiClient(
private var baseUrl: String = defaultBasePath, private var baseUrl: String = defaultBasePath,
private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val okHttpClientBuilder: OkHttpClient.Builder? = null,
private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder, private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder,
private val okHttpClient : OkHttpClient? = null private val okHttpClient : OkHttpClient? = null,
private val converterFactory: Converter.Factory? = null,
) { ) {
private val apiAuthorizations = mutableMapOf<String, Interceptor>() private val apiAuthorizations = mutableMapOf<String, Interceptor>()
var logger: ((String) -> Unit)? = null var logger: ((String) -> Unit)? = null
@ -33,6 +35,11 @@ class ApiClient(
.addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(MoshiConverterFactory.create(serializerBuilder.build())) .addConverterFactory(MoshiConverterFactory.create(serializerBuilder.build()))
.apply {
if (converterFactory != null) {
addConverterFactory(converterFactory)
}
}
} }
private val clientBuilder: OkHttpClient.Builder by lazy { private val clientBuilder: OkHttpClient.Builder by lazy {

View File

@ -11,6 +11,7 @@ import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import retrofit2.Retrofit import retrofit2.Retrofit
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Converter
import retrofit2.converter.scalars.ScalarsConverterFactory import retrofit2.converter.scalars.ScalarsConverterFactory
import com.squareup.moshi.Moshi import com.squareup.moshi.Moshi
import retrofit2.converter.moshi.MoshiConverterFactory import retrofit2.converter.moshi.MoshiConverterFactory
@ -20,7 +21,8 @@ class ApiClient(
private var baseUrl: String = defaultBasePath, private var baseUrl: String = defaultBasePath,
private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val okHttpClientBuilder: OkHttpClient.Builder? = null,
private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder, private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder,
private val okHttpClient : OkHttpClient? = null private val okHttpClient : OkHttpClient? = null,
private val converterFactory: Converter.Factory? = null,
) { ) {
private val apiAuthorizations = mutableMapOf<String, Interceptor>() private val apiAuthorizations = mutableMapOf<String, Interceptor>()
var logger: ((String) -> Unit)? = null var logger: ((String) -> Unit)? = null
@ -30,6 +32,11 @@ class ApiClient(
.baseUrl(baseUrl) .baseUrl(baseUrl)
.addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(MoshiConverterFactory.create(serializerBuilder.build())) .addConverterFactory(MoshiConverterFactory.create(serializerBuilder.build()))
.apply {
if (converterFactory != null) {
addConverterFactory(converterFactory)
}
}
} }
private val clientBuilder: OkHttpClient.Builder by lazy { private val clientBuilder: OkHttpClient.Builder by lazy {