Last active
April 29, 2019 16:38
-
-
Save MrTact/0fddded4fa55c32cbec0451d6af315d7 to your computer and use it in GitHub Desktop.
Object wrapper to easily create a retrofit client in Kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.fasterxml.jackson.databind.ObjectMapper | |
import com.fasterxml.jackson.databind.module.SimpleModule | |
import com.fasterxml.jackson.module.kotlin.KotlinModule | |
import retrofit2.Retrofit | |
import retrofit2.converter.jackson.JacksonConverterFactory | |
/** | |
* @return A callable instance of a retrofit client based on the provided API class | |
* | |
* @param baseUrl: The base URL for the api host | |
* @param apiClass: A Java class instance of the (usually) interface that implements the method calls for the | |
* various endpoints, annotated with the appropriate Retrofit annotations. | |
* @params mapperModules: Optional list of modules to add to the Jackson object mapper (e.g. JodaModule) | |
*/ | |
object RetrofitClient { | |
fun <T> get(baseUrl: String, apiClass: Class<T>, mapperModules: List<SimpleModule> = emptyList()): T { | |
val mapper = ObjectMapper() | |
.registerModule(KotlinModule()) | |
.also { objectMapper -> | |
mapperModules.forEach { objectMapper.registerModule(it) } | |
} | |
return Retrofit.Builder() | |
.baseUrl(baseUrl) | |
.addConverterFactory(JacksonConverterFactory.create(mapper)) | |
.build() | |
.create(apiClass) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment