在不使用参数和主体的情况下进行改造的错误请求,这怎么可能?

我的项目面临着一个非常奇怪的行为。


我正在使用改造 v2.6.0


我正在做这样的代码:


@GET("{department}/details/")

    fun getCouponDetailHistory(@Header("Authorization") token: String,

                               @Path("department") department: String): Deferred<Response<Any>>

我从服务中调用它,当然会发送参数。


我启用了调试模式来跟踪查询,我看到了:


INFO  [2019-08-02 10:03:13,132] okhttp3.OkHttpClient: --> GET https://my-url/departmentId/details

INFO  [2019-08-02 10:03:13,405] okhttp3.OkHttpClient: <-- 400 Bad Request https://my-url/departmentId/details (272ms, unknown-length body)

如果我将邮递员与一个超级简单的请求一起使用,而不是 URL 和授权令牌(我从我的代码中获取它,并且知道它是相同的)它会起作用。


我很难理解我怎么会在这里提出错误的请求,这可能是我的配置?


我是这样的。


fun retrofitClient(baseUrl: String): Client = Retrofit.Builder()

        .baseUrl(baseUrl)

        .addCallAdapterFactory(CoroutineCallAdapterFactory())


        //.addConverterFactory(JacksonConverterFactory.create(jsonMapper))

    .addConverterFactory(

        GsonConverterFactory.create())

        .client(okHttpClient)

        .build()

        .create()

如您所见,我之前添加了 JacksonConverterFactory。


它适用于我拥有的 POST 端点,但不适用于我的 GET。


有任何想法吗?


子衿沉夜
浏览 173回答 3
3回答

斯蒂芬大帝

好吧,经过一段时间后,我发现客户端上缺少一个标头。我是这样添加的&nbsp;@Headers("Accept:&nbsp;application/json")&nbsp; &nbsp;@GET("myurl")这解决了问题

幕布斯7119047

在 kotlin 中使用以下代码转换器进行 Void 响应。由于没有官方支持取消 Retrofit 的响应。    object UnitConverterFactory : Converter.Factory() {  override fun responseBodyConverter(type: Type, annotations: Array<out Annotation>,      retrofit: Retrofit): Converter<ResponseBody, *>? {    return if (type == Unit::class.java) UnitConverter else null  }  private object UnitConverter : Converter<ResponseBody, Unit> {    override fun convert(value: ResponseBody) {      value.close()    }  }}

神不在的星期二

我怀疑 / 在细节之后是问题所在。请在详细信息后删除 /@GET("{department}/details/")并重新启动您的应用程序它会工作。它给出 400,因为在请求中你没有传递额外的/之后的细节。https://my-url/departmentId/details (272ms, unknown-length body)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java