[kotlin][client] add support for okhttp requests with empty body (#10369)

* [kotlin][client] add support for okhttp requests with empty body

* [kotlin][client] add support for okhttp requests with empty body
This commit is contained in:
Bruno Coelho 2021-09-14 04:33:06 +01:00 committed by GitHub
parent 29f3869bda
commit 0211f7b82e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 178 additions and 53 deletions

View File

@ -29,6 +29,12 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
{{#jvm-okhttp3}}
import okhttp3.internal.Util.EMPTY_REQUEST
{{/jvm-okhttp3}}
{{#jvm-okhttp4}}
import okhttp3.internal.EMPTY_REQUEST
{{/jvm-okhttp4}}
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -161,25 +167,49 @@ import com.squareup.moshi.adapter
}.build() }.build()
} }
{{#jvm-okhttp3}} {{#jvm-okhttp3}}
mediaType == JsonMediaType -> RequestBody.create( mediaType == JsonMediaType -> {
{{#moshi}} if (content == null) {
MediaType.parse(mediaType), Serializer.moshi.adapter(T::class.java).toJson(content) EMPTY_REQUEST
{{/moshi}} } else {
{{#gson}} RequestBody.create(
MediaType.parse(mediaType), Serializer.gson.toJson(content, T::class.java) {{#moshi}}
{{/gson}} MediaType.parse(mediaType), Serializer.moshi.adapter(T::class.java).toJson(content)
{{#jackson}} {{/moshi}}
MediaType.parse(mediaType), Serializer.jacksonObjectMapper.writeValueAsString(content) {{#gson}}
{{/jackson}} MediaType.parse(mediaType), Serializer.gson.toJson(content, T::class.java)
{{#kotlinx_serialization}} {{/gson}}
MediaType.parse(mediaType), Serializer.jvmJson.encodeToString(content) {{#jackson}}
{{/kotlinx_serialization}} MediaType.parse(mediaType), Serializer.jacksonObjectMapper.writeValueAsString(content)
) {{/jackson}}
{{#kotlinx_serialization}}
MediaType.parse(mediaType), Serializer.jvmJson.encodeToString(content)
{{/kotlinx_serialization}}
)
}
}
{{/jvm-okhttp3}} {{/jvm-okhttp3}}
{{#jvm-okhttp4}} {{#jvm-okhttp4}}
mediaType == JsonMediaType -> {{#moshi}}Serializer.moshi.adapter(T::class.java).toJson(content){{/moshi}}{{#gson}}Serializer.gson.toJson(content, T::class.java){{/gson}}{{#jackson}}Serializer.jacksonObjectMapper.writeValueAsString(content){{/jackson}}{{#kotlinx_serialization}}Serializer.jvmJson.encodeToString(content){{/kotlinx_serialization}}.toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
{{#moshi}}
Serializer.moshi.adapter(T::class.java).toJson(content)
{{/moshi}}
{{#gson}}
Serializer.gson.toJson(content, T::class.java)
{{/gson}}
{{#jackson}}
Serializer.jacksonObjectMapper.writeValueAsString(content)
{{/jackson}}
{{#kotlinx_serialization}}
Serializer.jvmJson.encodeToString(content)
{{/kotlinx_serialization}}
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
{{/jvm-okhttp4}} {{/jvm-okhttp4}}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.gson.toJson(content, T::class.java).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.gson.toJson(content, T::class.java)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.jacksonObjectMapper.writeValueAsString(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.jacksonObjectMapper.writeValueAsString(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -15,6 +15,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -104,9 +105,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -106,9 +107,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.gson.toJson(content, T::class.java).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.gson.toJson(content, T::class.java)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ internal open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -12,6 +12,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.Util.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -101,9 +102,15 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> RequestBody.create( mediaType == JsonMediaType -> {
MediaType.parse(mediaType), Serializer.moshi.adapter(T::class.java).toJson(content) if (content == null) {
) EMPTY_REQUEST
} else {
RequestBody.create(
MediaType.parse(mediaType), Serializer.moshi.adapter(T::class.java).toJson(content)
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")

View File

@ -14,6 +14,7 @@ import okhttp3.MultipartBody
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.Response import okhttp3.Response
import okhttp3.internal.EMPTY_REQUEST
import java.io.BufferedWriter import java.io.BufferedWriter
import java.io.File import java.io.File
import java.io.FileWriter import java.io.FileWriter
@ -103,9 +104,16 @@ open class ApiClient(val baseUrl: String) {
} }
}.build() }.build()
} }
mediaType == JsonMediaType -> Serializer.moshi.adapter(T::class.java).toJson(content).toRequestBody( mediaType == JsonMediaType -> {
mediaType.toMediaTypeOrNull() if (content == null) {
) EMPTY_REQUEST
} else {
Serializer.moshi.adapter(T::class.java).toJson(content)
.toRequestBody(
mediaType.toMediaTypeOrNull()
)
}
}
mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.") mediaType == XmlMediaType -> throw UnsupportedOperationException("xml not currently supported.")
// TODO: this should be extended with other serializers // TODO: this should be extended with other serializers
else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.") else -> throw UnsupportedOperationException("requestBody currently only supports JSON body and File body.")