当前位置: 首页 > 知识库问答 >
问题:

如何指定Get-Request编码(reverfit+OkHttp)

常炯
2023-03-14
val gson = GsonBuilder()
        .setDateFormat("d.M.yyyy")
        .create()

val client = OkHttpClient.Builder()
        .build()

val retrofit = Retrofit.Builder()
        .baseUrl(RestService.BASE_URL)
        .client(client)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build()

val rest = retrofit.create(RestService::class.java)

编辑:最终解决方案

class EncodingInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {
        val response = chain.proceed(chain.request())
        val mediaType = MediaType.parse("application/json; charset=iso-8859-1")
        val modifiedBody = ResponseBody.create(mediaType, response.body().bytes())
        val modifiedResponse = response.newBuilder()
                .body(modifiedBody)
                .build()

        return modifiedResponse
    }
}

共有1个答案

融烨磊
2023-03-14

这样做的一种方法是构建一个拦截器,它接受响应并设置适当的内容类型,如下所示:

class ResponseInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val response = chain.proceed(chain.request())
        val modified = response.newBuilder()
                .addHeader("Content-Type", "application/json; charset=utf-8")
                .build()

        return modified
    }
}

您可以将其添加到OkHttp客户端,如下所示:

val client = OkHttpClient.Builder()
        .addInterceptor(ResponseInterceptor())
        .build()

您应该确保只对没有指定编码的API使用这个OKHttpClient,或者让拦截器只为适当的endpoint添加头,以避免覆盖来自其他endpoint的有效内容类型头。

 类似资料:
  • 问题内容: 在将代码从Python 2移植到Python 3时,从标准输入读取UTF-8文本时遇到了这个问题。在Python 2中,这可以正常工作: 但是Python 3需要 sys.stdin中的 ASCII ,如果输入中包含非ASCII字符,则会出现错误: UnicodeDecodeError:’ascii’编解码器无法解码位置..中的字节..:序数不在范围内(128) 对于常规文件,我将在打

  • 指定文字编码 可指定文字编码。一般情形下会自动判别,并无特意指定的必要。 1. 从选单列中选择[显示] > [文字编码]。 2. 选择希望指定的文字编码。 提示 仅可指定已开启网页的编码。于选择更新网页﹐或开启其他分页后﹐此指定即会自动解除。

  • 我正在使用在线Swagger编辑器为我的API创建Swagger规范。 我的API有一个GET请求endpoint,我使用以下YAML代码来描述输入参数: 如果我输入标记,我会收到一个错误,说: 不完全是来自 在Swagger中编写GET参数时如何设置示例?

  • 问题内容: 当使用带有https的hudson git插件时,如何指定密码? 问题答案: 你不能 这是git插件中的错误,但是有fork可以修复它,请参见: http://issues.hudson-ci.org/browse/HUDSON-3807

  • 问题内容: 我努力了: 和: 但总是会显示错误代码500。 问题答案: 根据Express(版本4+)文档,您可以使用: http://expressjs.com/4x/api.html#res.status <= 3.8

  • 相比开发普通的 Web 应用,在开发 SSR 应用时,端上环境和渲染机制的差异,会对编码带来一些约束: 状态管理 Server 端的渲染过程是一个同步的操作,其本质是将 JSX 组件渲染为 HTML 字符串。 setState 、 hooks 这类对组件异步更新状态的方法,以及组件的 生命周期 方法,在 Server 端不会被执行。 开发过程中,应尽量避免将用于渲染初始页面的状态,通过异步的方式来