Retrofit @body的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Retrofit @body的使用相关的知识,希望对你有一定的参考价值。

参考技术A retrofit中有什么注解 ,但是对于@body网上讲解不是很多,现在我们来分析下@body
首先我们要明白的是后台传参数的方式最常用的分为了get与post,get的参数是跟在url后面的,但是post的参数是放在请求体里面传给后台的,但是两种方式传表单数据的话,传给后台的参数字符串是一样的,只是get跟在url后,post放在请求体里面的,参数的形式都是以

这样的方式传参的,但是还有一种就是传json数据,get跟post都是把json放在body中传送给后台的。

retrofit一般传表单的数据是这样的:

底层自动封装成一个请求体,并通过这个注解来把这些参数封装成一个参数字符串传给后台!

如果是传json的话是这样的:

与上边的区别就是没得了@FormUrlEncoded来标志是表单数据,并且用的@body 里面的参数就是java中的bean对象!

这是最常用的两种方式,但是对于参数过多的表单数据按照第一种方式来写的话工程量有点大,有没得一种像post提交json这样的方式来提交表单数据呢?
别急,方法是这样的,也是使用@body:

注意这里照样没有@FormUrlEncoded,而且@body后面跟的是请求体,相当于我们直接给后端传一个我们自定义的请求体,而不用retrofit注解来用底层封装,但是这个传的RequestBody要进行自己封装,加上参数必须的=,&符号,像下边这样:

封装数据这样封装:

封装RequestBody这样封装,把上边的HashMap<String, String>包装的参数传进来:

再把返回的这个RequestBody传入到上边的方法中,这样就实现了传递post表单的方法!

其实get中的有 @GET("weather/index")

也可以通过@QueryMap 来提交大量数据,这里就不过多说了

retrofit @FieldMap 与 @Body 区别

retrofit @FieldMap 与 @Body 区别

菜鸟何时起飞关注

0.222019.06.26 14:52:29字数 91阅读 3,640

@FieldMap必须与 @FormUrlEncoded 一起配合使用
提交的Content-Type 为application/x-www-form-urlencoded

   @POST()
    @FormUrlEncoded
    <T> Observable<ResponseBody> executePost(
            @Url() String url,
            @FieldMap Map<String, Object> maps);

      Content-Type: application/x-www-form-urlencoded

@Body 提交的提交的Content-Type 为application/json; charset=UTF-8

   @POST()
    Observable<ResponseBody> executePostBody(
            @Url String url,
            @Body Object object);

 Content-Type: application/json; charset=UTF-8

如果使用别人的封装的网络框架 出现415 的情况 就可以考虑看是不是因为Content-Type不对,切换一下body与FieldMap 万一解决了呢!!!!

4人点赞

Retrofit

以上是关于Retrofit @body的使用的主要内容,如果未能解决你的问题,请参考以下文章

Retrofit 响应体无body时解析EOFException

Retrofit 2.0如何获得反序列化错误response.body

Retrofit 2.0如何获得反序列化错误response.body

Retrofit @body的使用

无法在 Body raw 上使用 Retrofit 发布

retrofit @FieldMap 与 @Body 区别