Android Retrofit Post请求参数长度限制问题 retrofit sendto failed: ECONNRESET (Connection reset by peer)

retrofit sendto failed: ECONNRESET (Connection reset by peer)【android客户端Post请求参数长度限制(参数过大)】解决办法
 

一、问题的出现
post请求后台,当参数字符太长超过900字时会报sendto failed: ECONNRESET (Connection reset by peer)错误,stroke找了很多问题结果没几个人回答,回答的也不能解决问题;


发现问题:原来,是我对Retrofit的@QueryMap() Map<String, String> params不是很理解,使用@QueryMap()会直接放在post请求的data里面更url一起拼接,url请求有长度限制(浏览器、服务器等都有可能);

 

解决问题:最后发现了Retrofit2.0中还有一个@FieldMap,这个参数就是给我们的表单提交所使用的,我们是使用的是POST请求,使用FieldMap会将请求的参数封装在Request的Body中,理论上POST请求是没有长度限制的。 

Post请求
@FormUrlEncoded
@POST("postService")
Call<String> postModelService(@Field("msg") String msg, @Field("string") boolean isString);

Retrofit中的Post请求则需要将前面的@GET注解换成@POST注解,而Post请求的文本参数则用注解@Field来声明,同时还必须给方法添加注解@FormUrlEncoded来告知Retrofit参数为表单参数,如果只为参数增加@Field注解,而不给方法添加@FormUrlEncoded注解运行时会抛异常。

如果Post请求有很多参数同样也可以使用集合的方式进行声明

@FormUrlEncoded
@POST("{path}")
Call<User> postModelService(@Path("path") String path, @FieldMap Map<String, String> map);

Retrofit中提供了注解@FieldMap用来声明一个Map类型的集合作为Post请求的表单参数

Post请求的服务接口声明完成之后,讲得到的Call对象调用execute或者enqueue即可发起同步或异步的Post请求
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值