【问题标题】:Retrofit gives null response while calling Post request from android从 android 调用 Post 请求时,Retrofit 给出空响应
【发布时间】:2019-12-12 15:46:10
【问题描述】:

目前的回应

Response{protocol=http/1.0, code=404, message=Not Found, 
    url=http://testapp*****/api/dev/myapp**/subscription%2F2be110}

但我传递的网址是

url=http://testapp*****/api/dev/myapp**/subscription/2be110

"subscription/2be110" 作为字符串传递给在以下函数接收的 api 服务

@Headers("Content-Type: application/json;charset=UTF-8","Accept: application/json")
    @POST("{urlEndString}")
    fun getResponse(
        @Path ("urlEndString") urlEndString : String, @Body `object`: JsonObject
    ):Call<JsonObject>

如何将反斜杠改为“%2F”格式?有什么办法可以解决这个问题?

注意:使用改造2

【问题讨论】:

  • 需要对Url进行url编码@FormUrlEncoded
  • 我试过 @FormUrlEncoded ,但它没有返回任何响应

标签: android api kotlin retrofit retrofit2


【解决方案1】:

@Path 参数是 URLEncoded。因此斜杠也将被 URLEncoded。您可以使用 2 个路径参数,例如

@POST("{urlEndString1}/{urlEndString2}")
fun getResponse(
        @Path ("urlEndString1") urlEndString1 : String, @Path ("urlEndString2") urlEndString2 : String, @Body `object`: JsonObject):Call<JsonObject>

并传递以斜线分隔的 URL 的 2 部分。

作为替代方案,您可以使用@Path(value="urlEndString", encoded=true) 表明参数已经编码,Retrofit 不需要对其进行编码。

【讨论】:

  • 感谢@Vladyslav Matviienko,它工作正常,我怀疑是否有可能将路径作为数组传递?
  • @SARATHV 你能显示一个你想获取的示例 URL 吗?
  • 例如,“testapp*****/api/dev/myapp**/” - 常量 url,如果需要,我想要 4 个子路径,如 urlEndString1、urlEndString2、urlEndString3 ..... 等.在那种情况下,我真的需要为此添加新的帖子功能吗?或者我可以有另一种方法?对不起,如果我没有任何意义......
  • 请给出例子,从你的描述中看不清楚
  • 示例:在情况 1: url = com.example.myapp/string1 ;案例 2: url = com.example.myapp/string1/string2/ ;案例3:url = com.example.myapp/string1/string2/string3 ......可以吗?或者干脆离开它。无论如何,感谢您的时间。我目前的问题解决了,我会在以后解决我的疑问
猜你喜欢
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2016-12-26
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多