【问题标题】:Error Code 415 with retrofit错误代码 415 与改造
【发布时间】:2018-04-27 14:10:23
【问题描述】:

我创建了以下 API 类来查询网络服务

 @POST("/v1/User/forgot-password")
    @FormUrlEncoded
    fun forgotPass(@Field("email") email: String): Call<ForgotPassword>

并将其称为

 val call = RetrofitHelper.instance!!.api.forgotPass(email)
        call.enqueue(object : Callback<ForgotPassword> {

            override fun onResponse(call: Call<ForgotPassword>, response: Response<ForgotPassword>) {
                if (response.code() == 200) {
                    Log.e("response", response.body().toString())
                    forgotPassView.forgotPassRequestSuccess()

                }
            }

            override fun onFailure(call: Call<ForgotPassword>, t: Throwable) {
                Log.e("onFailure", t.message)
            }
        })

我得到的回复是415,而网络服务工作正常。

我尝试了不同的技术来解决它,但似乎还有更多问题。 请帮我解决这个问题。 谢谢。

【问题讨论】:

  • 应该是"v1/User/forgot-password"baseUrl("blahblah/"),重点是第一个缺少/,第二个没有
  • 415 通常意味着您以错误的格式发送数据。您确定该服务期望数据为application/x-www-form-urlencoded 而不是其他格式(JSON、url 中的查询参数等)?
  • @EpicPandaForce 它没有任何区别
  • @iagreen 是的,它是 application/json
  • 但我仍然收到 400 HttpLoggingInterceptor 没有显示任何内容

标签: kotlin retrofit mvp android-mvp


【解决方案1】:

要发送 json 有效负载,请定义一个包装类 --

data class EmailBody(val email: String)

并将其用作@BodyPOST

@POST("v1/User/forgot-password")
fun forgotPass(@Body email: EmailBody): Call<Void>

然后,当您想调用它时,将电子邮件地址包装在 EmailBody 对象中 --

service.forgotPass(EmailBody(email))

【讨论】:

  • 东西移动了,但现在我正在失败
  • End of input at line 1 column 1 path $
  • 服务器发回什么?听起来它什么都没有发回。从您上面的代码看来,您期待一个对象回来?
  • 服务器不会返回任何内容。只需代码 200 或其他
  • 啊,那么您不应该尝试将正文解析为ForgotPassword。请改用Void。请参阅上面的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2019-07-11
  • 2019-08-16
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
相关资源
最近更新 更多