retrofit中使用body标签传RequestBody

现在的Android开发者基本上都用过retrofit这个第三方网络请求库吧!!!

网络请求中有get、post、delete和put等等请求方式。
现在我们需要用到post请求:

@POST("exec")
Observable<HttpResult> getSystemContent(@Body RequestBody body);

可以注意到我们这里请求参数的标签用到的是@Body,一般来说我们单个或者少个参数的时候用到的是@Field标签里面放的是单个数据比如:

@POST("user/getParts.do")
    @FormUrlEncoded
    Observable<HttpResult<List<Model>>> getPart(@Field("userId") String userId);

当参数个数过多时比如:

@POST("calculate/saveLog.do")
    @FormUrlEncoded
    Observable<HttpResult<Object>> saveLog(@Field("userId") String userId,
                                           @Field("firmwareVersion") String firmwareVersion,
                                           @Field("appVersion") String appVersion,
                                           @Field("equipmentNumber") String equipmentNumber,
                                           @Field("log") String log
    );

这就看起来有点恶心了,出现这种情况我们一般就会使用@FieldMap标签或者@Body

@FieldMap标签:传入的就是一个map集合,把参数以键值对的方式添加到map中,然后在进行请求比如:

@POST("calculate/saveLog.do")
    @FormUrlEncoded
    Observable<HttpResult<Object>> saveLog(@FieldMap Map<String,String> map);

至于怎么把数据添加到map中我就不写了。

@Body标签:传入的就是一个你创建的对象,把key值设置成该对象的属性,然后value就是该属性对应的值。比如:

@POST("calculate/saveLog.do")
    Observable<HttpResult<Object>> saveLog(@Body DeviceBindBean bean);

创建一个DeviceBindBean对象把对应的参数赋值给对应的属性,把该对象放进来作为请求参数。

注:使用@body标签时不能用@FormUrlEncoded标签,不然会报以下异常:

java.lang.IllegalArgumentException: @Body parameters cannot be used with form or multi-part encoding. (parameter #1)

我这里主要讲的就是参数是RequestBody,改对象是在okhttp包下的。我们现在的项目就是一个通过加密生成的String字符串放入我们的请求body中作为参数请求服务器。

在请求的时候:

RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), bodyStr);

把该body作为参数传递给服务器即可,用法还是和正常的retrofit一样。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值