[BUG][Kotlin] Add support for collection of generic classes (Jackson / Gson / Moshi) (#9918)

* Cherry picked commits from add-support-for-collection-of-generic-classes

* Regenerated samples

* Missing work by @adamsz-lume

* Try to fix maven plugin error

Co-authored-by: Bruno Coelho <4brunu@gmail.com>
This commit is contained in:
Robin Trietsch
2021-07-24 17:04:14 +02:00
committed by GitHub
parent 888f9cd84a
commit 8eba70dd3d
26 changed files with 61 additions and 15 deletions

View File

@@ -31,6 +31,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
implementation "com.squareup.moshi:moshi-kotlin:1.12.0"
implementation "com.squareup.moshi:moshi-adapters:1.12.0"
implementation "com.squareup.okhttp3:okhttp:4.9.1"
testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2"
}

View File

@@ -22,6 +22,7 @@ import java.time.OffsetDateTime
import java.time.OffsetTime
import java.util.Date
import java.util.Locale
import com.squareup.moshi.adapter
open class ApiClient(val baseUrl: String) {
companion object {
@@ -106,6 +107,7 @@ open class ApiClient(val baseUrl: String) {
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")
}
@OptIn(ExperimentalStdlibApi::class)
protected inline fun <reified T: Any?> responseBody(body: ResponseBody?, mediaType: String? = JsonMediaType): T? {
if(body == null) {
return null
@@ -124,7 +126,7 @@ open class ApiClient(val baseUrl: String) {
return f as T
}
return when(mediaType) {
JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent)
JsonMediaType -> Serializer.moshi.adapter<T>().fromJson(bodyContent)
else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.")
}
}