From 5d98fc6beb6892b91cd5057f97706bed724e50ff Mon Sep 17 00:00:00 2001 From: Akihito Nakano Date: Thu, 27 Dec 2018 08:59:57 +0900 Subject: [PATCH] Fix UUID support (#1746) * Add custom type adapter to deserialize UUID * Update samples ./bin/kotlin-client-threetenbp.sh ./bin/kotlin-client-string.sh ./bin/kotlin-client-petstore.sh --- .../infrastructure/ApiClient.kt.mustache | 11 ++++++++++- .../openapitools/client/infrastructure/ApiClient.kt | 11 ++++++++++- .../openapitools/client/infrastructure/ApiClient.kt | 11 ++++++++++- .../openapitools/client/infrastructure/ApiClient.kt | 11 ++++++++++- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/ApiClient.kt.mustache index 8b7d4f3b665..a7d4ae11f5c 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/ApiClient.kt.mustache @@ -1,7 +1,11 @@ package {{packageName}}.infrastructure +import com.squareup.moshi.FromJson +import com.squareup.moshi.Moshi +import com.squareup.moshi.ToJson import okhttp3.* import java.io.File +import java.util.* open class ApiClient(val baseUrl: String) { companion object { @@ -51,7 +55,12 @@ open class ApiClient(val baseUrl: String) { protected inline fun responseBody(body: ResponseBody?, mediaType: String = JsonMediaType): T? { if(body == null) return null return when(mediaType) { - JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(body.source()) + JsonMediaType -> Moshi.Builder().add(object { + @ToJson + fun toJson(uuid: UUID) = uuid.toString() + @FromJson + fun fromJson(s: String) = UUID.fromString(s) + }).build().adapter(T::class.java).fromJson(body.source()) else -> TODO() } } diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 02c7b2cddc0..fa6f15fbd05 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,7 +1,11 @@ package org.openapitools.client.infrastructure +import com.squareup.moshi.FromJson +import com.squareup.moshi.Moshi +import com.squareup.moshi.ToJson import okhttp3.* import java.io.File +import java.util.* open class ApiClient(val baseUrl: String) { companion object { @@ -51,7 +55,12 @@ open class ApiClient(val baseUrl: String) { protected inline fun responseBody(body: ResponseBody?, mediaType: String = JsonMediaType): T? { if(body == null) return null return when(mediaType) { - JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(body.source()) + JsonMediaType -> Moshi.Builder().add(object { + @ToJson + fun toJson(uuid: UUID) = uuid.toString() + @FromJson + fun fromJson(s: String) = UUID.fromString(s) + }).build().adapter(T::class.java).fromJson(body.source()) else -> TODO() } } diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 02c7b2cddc0..fa6f15fbd05 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,7 +1,11 @@ package org.openapitools.client.infrastructure +import com.squareup.moshi.FromJson +import com.squareup.moshi.Moshi +import com.squareup.moshi.ToJson import okhttp3.* import java.io.File +import java.util.* open class ApiClient(val baseUrl: String) { companion object { @@ -51,7 +55,12 @@ open class ApiClient(val baseUrl: String) { protected inline fun responseBody(body: ResponseBody?, mediaType: String = JsonMediaType): T? { if(body == null) return null return when(mediaType) { - JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(body.source()) + JsonMediaType -> Moshi.Builder().add(object { + @ToJson + fun toJson(uuid: UUID) = uuid.toString() + @FromJson + fun fromJson(s: String) = UUID.fromString(s) + }).build().adapter(T::class.java).fromJson(body.source()) else -> TODO() } } diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 02c7b2cddc0..fa6f15fbd05 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,7 +1,11 @@ package org.openapitools.client.infrastructure +import com.squareup.moshi.FromJson +import com.squareup.moshi.Moshi +import com.squareup.moshi.ToJson import okhttp3.* import java.io.File +import java.util.* open class ApiClient(val baseUrl: String) { companion object { @@ -51,7 +55,12 @@ open class ApiClient(val baseUrl: String) { protected inline fun responseBody(body: ResponseBody?, mediaType: String = JsonMediaType): T? { if(body == null) return null return when(mediaType) { - JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(body.source()) + JsonMediaType -> Moshi.Builder().add(object { + @ToJson + fun toJson(uuid: UUID) = uuid.toString() + @FromJson + fun fromJson(s: String) = UUID.fromString(s) + }).build().adapter(T::class.java).fromJson(body.source()) else -> TODO() } }