retrofit post数据时怎么才能别urlencode?

清流闻书
  • 103
    @FormUrlEncoded
    @POST("abc/eft/ccc")
    Observable<BaseResponseBean> postURL(@Field(value="urlA", encoded=true) String urlA);

无论encoded=true还是encoded=false(默认)。最终的结果传上去的urlA都是经过UrlEncode转换的。

怎么才能直接post上去原始的字符串呢?

咨询了一些后端人员,表示正常情况下post表单数据,肯定是要URLEncode的。不然如果有&之类的,很容易有问题。
但大陆开发没有那么严谨。我们就是要求传原始的数据的。

回复
阅读 8.1k
6 个回答

没有找到方法。最后只能在Interceptor中拦截,进行java.net.URLDecoder.decode("要解码的字符串","utf-8");

可以不用form 提交的方式,改成json 提交你试试

挖坟,对于表单上传肯定是要URLEncode的这个是协议里的一部分,但这个对于你来说是透明的,你不用管,一般是由 两端的框架自行处理,你发送的是 A&B,你的HTTP框架会处理成 A%26B ,后台的框架收到的是 A%26B,框架会自动解码成 A&B 交给上层,也就是说后台开发拿到的还是 A&B 。

你这是用的是post的请求方式,URLEncode只是对你的URL进行encode,你这个字符串实际上是放在http的body里面的,这个实际上和你是没什么关系的。

题主说的 encoded 属性应该是指 @Field 中的 encoded 吧?

文档对这个属性的说明是:Specifies whether the name and value are already URL encoded. 也就是:标注说明这个字段的键和值是否已经进行过编码转换。如果你改为了 true(默认是 false),Retrofit 在这个环节就不会进行 encode 处理了,所以题主要不看下是不是其他环节进行了 encode?

kejw
  • 2
新手上路,请多包涵

请问你解决这个问题了吗, 可以给出解决方法吗?

宣传栏