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 params不是很理解,使用@QueryMap()会直接放在post请求的data里面更url一起拼接,url请求有长度限制(浏览器、服务器等都有可能);

 

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

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

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

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

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

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

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

你可能感兴趣的:(Android,Android,Retrofit2.0)