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
android retrofit@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 = ate(MediaType.parse("application/json; charset=utf-8"), bodyStr);
把该body作为参数传递给服务器即可,⽤法还是和正常的retrofit⼀样。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论