From cfc500b0d2c6065e5fddaabc92e3ad45f61561b6 Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 14 Apr 2026 14:56:16 +0300 Subject: [PATCH 1/3] Update NetworkClient.kt Implicit set MediaType for different body types --- .../java/com/mattermost/networkclient/NetworkClient.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt b/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt index b196baf1f..11c3bb9d6 100644 --- a/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt +++ b/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt @@ -408,7 +408,7 @@ internal class NetworkClient(private val context: Context, private val baseUrl: when (options.getType("body")) { ReadableType.Array -> { val jsonBody = JSONArray(options.getArray("body")!!.toArrayList()) - requestBody = jsonBody.toString().toRequestBody() + requestBody = jsonBody.toString().toRequestBody(MediaType.parse("application/json; charset=utf-8")) } ReadableType.Map -> { val jsonBody = (options.getMap("body")!!.toHashMap() as Map<*, *>?)?.let { @@ -416,19 +416,19 @@ internal class NetworkClient(private val context: Context, private val baseUrl: it ) } - requestBody = jsonBody?.toString()?.toRequestBody() + requestBody = jsonBody?.toString()?.toRequestBody(MediaType.parse("application/json; charset=utf-8")) } ReadableType.String -> { - requestBody = options.getString("body")!!.toRequestBody() + requestBody = options.getString("body")!!.toRequestBody(MediaType.parse("text/plain; charset=utf-8")) } ReadableType.Null -> { requestBody = EMPTY_REQUEST } ReadableType.Boolean -> { - requestBody = options.getBoolean("body").toString().toRequestBody() + requestBody = options.getBoolean("body").toString().toRequestBody(MediaType.parse("text/plain; charset=utf-8")) } ReadableType.Number -> { - requestBody = options.getDouble("body").toString().toRequestBody() + requestBody = options.getDouble("body").toString().toRequestBody(MediaType.parse("text/plain; charset=utf-8")) } } } else if (method.uppercase(Locale.ENGLISH) == "POST") { From d725977f33402d0080708606f04595b4827f9f44 Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 14 Apr 2026 15:08:05 +0300 Subject: [PATCH 2/3] Update NetworkClient.kt add explicit content-type for empty requests --- .../main/java/com/mattermost/networkclient/NetworkClient.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt b/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt index 11c3bb9d6..873dde250 100644 --- a/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt +++ b/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt @@ -23,7 +23,6 @@ import com.mattermost.networkclient.metrics.RequestMetadata import com.mattermost.networkclient.metrics.getNetworkType import okhttp3.* import okhttp3.RequestBody.Companion.toRequestBody -import okhttp3.internal.EMPTY_REQUEST import okhttp3.tls.HandshakeCertificates import org.json.JSONArray import org.json.JSONObject @@ -422,7 +421,7 @@ internal class NetworkClient(private val context: Context, private val baseUrl: requestBody = options.getString("body")!!.toRequestBody(MediaType.parse("text/plain; charset=utf-8")) } ReadableType.Null -> { - requestBody = EMPTY_REQUEST + requestBody = "".toRequestBody(MediaType.parse("text/plain; charset=utf-8")) } ReadableType.Boolean -> { requestBody = options.getBoolean("body").toString().toRequestBody(MediaType.parse("text/plain; charset=utf-8")) @@ -432,7 +431,7 @@ internal class NetworkClient(private val context: Context, private val baseUrl: } } } else if (method.uppercase(Locale.ENGLISH) == "POST") { - requestBody = EMPTY_REQUEST + requestBody = "".toRequestBody(MediaType.parse("text/plain; charset=utf-8")) } } From d79b41d63f2489ff5e50d8a066b83978bde0a0f6 Mon Sep 17 00:00:00 2001 From: Daniil Zobov Date: Tue, 14 Apr 2026 15:11:33 +0300 Subject: [PATCH 3/3] Update NetworkClient.kt Refactoring from review comments --- .../mattermost/networkclient/NetworkClient.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt b/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt index 873dde250..2ca086742 100644 --- a/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt +++ b/android/src/main/java/com/mattermost/networkclient/NetworkClient.kt @@ -23,6 +23,7 @@ import com.mattermost.networkclient.metrics.RequestMetadata import com.mattermost.networkclient.metrics.getNetworkType import okhttp3.* import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.MediaType.Companion.toMediaType import okhttp3.tls.HandshakeCertificates import org.json.JSONArray import org.json.JSONObject @@ -46,6 +47,8 @@ const val CERTIFICATES_PATH = "certs" internal class NetworkClient(private val context: Context, private val baseUrl: HttpUrl? = null, options: ReadableMap? = null, cookieJar: CookieJar? = null) { private var okHttpClient: OkHttpClient private var webSocketUri: URI? = null + private val jsonUtf8MediaType = "application/json; charset=utf-8".toMediaType() + private val textUtf8MediaType = "text/plain; charset=utf-8".toMediaType() var clientHeaders: HashMap = hashMapOf() var clientRetryInterceptor: Interceptor? = null @@ -407,7 +410,7 @@ internal class NetworkClient(private val context: Context, private val baseUrl: when (options.getType("body")) { ReadableType.Array -> { val jsonBody = JSONArray(options.getArray("body")!!.toArrayList()) - requestBody = jsonBody.toString().toRequestBody(MediaType.parse("application/json; charset=utf-8")) + requestBody = jsonBody.toString().toRequestBody(jsonUtf8MediaType) } ReadableType.Map -> { val jsonBody = (options.getMap("body")!!.toHashMap() as Map<*, *>?)?.let { @@ -415,23 +418,23 @@ internal class NetworkClient(private val context: Context, private val baseUrl: it ) } - requestBody = jsonBody?.toString()?.toRequestBody(MediaType.parse("application/json; charset=utf-8")) + requestBody = jsonBody?.toString()?.toRequestBody(jsonUtf8MediaType) } ReadableType.String -> { - requestBody = options.getString("body")!!.toRequestBody(MediaType.parse("text/plain; charset=utf-8")) + requestBody = options.getString("body")!!.toRequestBody(textUtf8MediaType) } ReadableType.Null -> { - requestBody = "".toRequestBody(MediaType.parse("text/plain; charset=utf-8")) + requestBody = "".toRequestBody(textUtf8MediaType) } ReadableType.Boolean -> { - requestBody = options.getBoolean("body").toString().toRequestBody(MediaType.parse("text/plain; charset=utf-8")) + requestBody = options.getBoolean("body").toString().toRequestBody(textUtf8MediaType) } ReadableType.Number -> { - requestBody = options.getDouble("body").toString().toRequestBody(MediaType.parse("text/plain; charset=utf-8")) + requestBody = options.getDouble("body").toString().toRequestBody(textUtf8MediaType) } } } else if (method.uppercase(Locale.ENGLISH) == "POST") { - requestBody = "".toRequestBody(MediaType.parse("text/plain; charset=utf-8")) + requestBody = "".toRequestBody(textUtf8MediaType) } }