retrofit的请求方式总概(包含binary上传文件方式)

一、正常的请求方式

使用retrofit做解析ApiServse中

@POST("")

Observable<需要解析实体类>getList2(@Header("User-Agent") String s);//括号中请求头可为空

Activity中

Observable list = getRetrofit("http://www.xxx.com/").create(ApiService.class)

.getList2("rxl");//如果上面请求头为空这个括号也为空

getNetData(list);

二、动态传值方式

使用retrofit做解析ApiServse中

@POST("{list}/{newId}/{page}-10.html")

Observable<需要解析实体类> getList(@Header("User-Agent") String s,

@Path("list") String list,@Path("newId") String newId,@Path("page")int page);

Activity中

Observable list = getRetrofit("http://www.xxxx.com/").create(ApiService.class)

.getList("rxl","list","T134",0);

getNetData(list);

三、拼接参数提交方式

1、Form表单正常的提交方式

使用retrofit做解析ApiServse中

@FormUrlEncoded

@POST("")

Observable<需要解析实体类> withParams(@Field("createCollegeId") String createCollegeId,@Field("loginName")String loginName,@Field("password")String password);

Activity中

Observable observable = getRetrofit("http://www.xxx.com/").create(ApiService.class)

.withParams("73","15100133517","a12345");

getNetData(observable);

2、map表单提交方式

使用retrofit做解析ApiServse中

@FormUrlEncoded

@POST("")

Observable<需要解析实体类> withMap(@FieldMap Map params);

Activity中

final Map params =new HashMap<>();

params.put("createCollegeId","73");

params.put("loginN","15100133517");

params.put("password","a12345");

Observable observable = getRetrofit("http://www.xxx.com/").create(ApiService.class)

.withMap(params);

getNetData(observable);

四、带请求体的请求方式(body以json形式传入)

使用retrofit做解析ApiServse中

@POST(".")

Observable <需要解析实体类> getData(@Body RequestBody requestBody);

Activity中

MediaType JSON = MediaType.parse("application/json; charset=utf-8");

RequestBody body = RequestBody.create(JSON,"{"userId":"aadc2d9fe76f4b89bf37ca738e23eafe","channelId":"b9240eee3b0211e8b64c00163e30445d","cursor": 0}");

Observable observable = getRetrofit("http://www.xxx.com/").create(ApiService.class)

.withParams(body);

getNetData( body);

五、上传文件

普通表单的上传文件

    File file = new File(fileUrl); 
    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);

@Multipart
@POST("xxxxx")
rx.Observable uploadFile(@Part MultipartBody.Part file, @Header("fileName")String
fileName, @Header("tokenId")String tokenId);

表单的方式上传文件携带参数

RequestBody block = RequestBody.create(MediaType.parse("text/plain"), "client");
RequestBody token = RequestBody.create(MediaType.parse("text/plain"),String.valueOf(Hawk.get(AppConfig.Token,"")));

/**
* 上传文件
*/
@Multipart
@POST("system/webservice/file/upload")
rx.Observable uploadFile(@Part MultipartBody.Part file, @Part("token") RequestBody token ,
@Part("visitor_id") RequestBody visitor_id, @Part("block") RequestBody block );

binary方式上传

这种方式是没有键值对的与表单上传的方式不同,文件以二进制的方式直接放到body里进行上传
客户端接口代码


image.png

客户端代码实现


image.png

你可能感兴趣的:(retrofit的请求方式总概(包含binary上传文件方式))