记一次Retrofit请求的小坑

1,610 阅读1分钟

Post请求

前不久做个功能,使用Retrofit POST请求,其中的一个 Query 参数是一个 JsonObject 转的 String 类型。

先对这个jsonObject 类型的参数做了 URLEncoder.encode, 之后打印出来看是正确的,

但是拼接到url后,发现参数里的双引号没有被转义……

Json数据,所以开头是:{",转义后的十六进制值是:"%7B%22",但实际看到的是 "%7B22",后端接口就不认啦 >_<

Query 参数

查了好久的信息都没查到问题在哪里。

最后查到Query 要这样设置:

@Query(value = "xxx", encoded = true) String valueXXX

指定

encoded = true

看源码

@Documented
@Target(PARAMETER)
@Retention(RUNTIME)
public @interface Query {
  /** The query parameter name. */
  String value();

  /**
   * Specifies whether the parameter {@linkplain #value() name} and value are already URL encoded.
   */
  boolean encoded() default false;
}

但先encode过了作为value的,不明白为什么还要指定下encoded 为true?

先记这些。