【问题标题】:Retrofit adds random number in query parameter?改造在查询参数中添加随机数?
【发布时间】:2020-07-29 11:34:54
【问题描述】:

我正在调用一个带有查询参数“par”的 GET API,该查询参数包含一个加密字符串。加密字符串包含 JSON 数据,调用 API 时会出现问题,添加随机字符串。例如,这是一个加密字符串

"0wDs7cLFw63nXIQc%2FodiEJr0DWgJJJGj%2ByALAIaN%2F0TnYKp7yDYcKjE8Kftf%2Bg7tA68DMz5g%2FhJAfmKhzOKVESmrw0OUviTiFz1yQI2IQPM%3D"

但是当我调用 API 时,相同的字符串变成了

"0wDs7cLFw63nXIQc%252FodiEJr0DWgJJJGj%252ByALAIaN%252F0TnYKp7yDYcKjE8Kftf%252Bg7tA68DMz5g%252FhJAfmKhzOKVESmrw0OUviTiFz1yQI2IQPM%253D"

这是我的代码:

  @GET("sendotp")
        Call<ResponseBody> getKey(@QueryMap Map<String,String> map);

  Map<String,String> jsonMap=new HashMap<String,String>();
        

jsonMap.put("par","0wDs7cLFw63nXIQc%2FodiEJr0DWgJJJGj%2ByALAIaN%2F0TnYKp7yDYcKjE8Kftf%2Bg7tA68DMz5g%2FhJAfmKhzOKVESmrw0OUviTiFz1yQI2IQPM%3D");

Call<ResponseBody> callSendOTP=RetrofitSingleton.getInstance().get_Api().getKey(jsonMap);

使用拦截器,我得到了这个:

https://http://046ba9a626ae.ngrok.io/webresources/generic/key?par=0wDs7cLFw63nXIQc%252FodiEJr0DWgJJJGj%252ByALAIaN%252F0TnYKp7yDYcKjE8Kftf%252Bg7tA68DMz5g%252FhJAfmKhzOKVESmrw0OUviTiFz1yQI2IQPM%253D 

【问题讨论】:

  • %URL encoded%25,所以它不是随机的。
  • %25 是百分号的 Unicode (%)

标签: java android json get retrofit2


【解决方案1】:

在 Retrofit2 中,参数名称和值默认是 URL 编码的。您需要添加 encoded = true 来改变这种行为。

void createMyStuff(
     @Header("X-Signature") String authorization,
     @Query(value="nickname", encoded = true) String nickname,
     @Query("language") String language,
     Callback<MyAPIResponse> cb);

【讨论】:

  • 感谢修复(@QueryMap(encoded = true) Map map);
猜你喜欢
  • 1970-01-01
  • 2019-05-15
  • 2020-09-02
  • 1970-01-01
  • 2017-08-11
  • 2016-08-12
  • 2020-08-07
  • 1970-01-01
相关资源
最近更新 更多