使用 POST 命令时改进到 unicode 的转换

问题描述 投票:0回答:0

我目前正在使用数据类来构建改造 POST api 调用的请求主体。 主体本质上包含字符串。但是,我在发送字符串时注意到一个问题。 Retrofit 就是修改一些特性。基本上我的字符串是

Hgjdwwk=
但是logcat显示改造发送
Hgjdwwk\u003d
。它将我的字符转换为 unicode 格式。我需要保持原样。

下面是数据类:

data class RetrofitRequestBody(
    @field:com.google.gson.annotations.SerializedName("item")
    val item: RetrofitBodyItem?
)

data class RetrofitBodyItem(
    @field:com.google.gson.annotations.SerializedName("id") val id: String?,
    @field:com.google.gson.annotations.SerializedName("key") val key: String?,
)

API 调用如下所示:

fun postCheckItem(
        data: DataItem) {
...
val response = api.postCheckItem(
                    RetrofitRequestBody(
                        item = RetrofitBodyItem(
                            id = data.challenge,
                            key = data.publicKey,
                        )
                    )
                )

....

相关的服务看起来像:

    @POST("v1/check-item")
    suspend fun postCheckItem(
        @Body request: RetrofitRequestBody,
    ): Response

另外,因为我正在使用

Dagger-Hilt
,所以我必须声明用于数据注入的组件如下:

@InstallIn(SingletonComponent::class)
@Module
class APIModule {
...

@Singleton
    @Provides
    @Named("default")
    fun provideDefaultOkHttpClient() = if (BuildConfig.DEBUG) {
        val loggingInterceptor = HttpLoggingInterceptor()
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
        OkHttpClient.Builder()
            .addInterceptor(loggingInterceptor)
            .build()
    } else {
        OkHttpClient
            .Builder()
            .build()
    }

    @Singleton
    @Provides
    @Named("auth")
    fun provideAuthOkHttpClient(
        @Named("default") okHttpClient: OkHttpClient,
        authInterceptor: AuthInterceptor
    ) = okHttpClient.newBuilder()
        .callTimeout(30, TimeUnit.SECONDS)
        .connectTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .addInterceptor(authInterceptor)
        .build()

    @Singleton
    @Provides
    fun provideRetrofit(
        @Named("auth") okHttpClient: OkHttpClient
    ): Retrofit {
        val gson = GsonBuilder().disableHtmlEscaping().create()
        return Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create(gson))
            .baseUrl(BuildConfig.BASE_URL + BuildConfig.ENDPOINT_VERSION)
            .client(okHttpClient)
            .build()
    }

我在想:

val gson = GsonBuilder().disableHtmlEscaping().create()
        return Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create(gson))

可以解决问题,但没有用。

有什么想念的吗?? 谢谢

android kotlin gson retrofit retrofit2
© www.soinside.com 2019 - 2024. All rights reserved.